Wikibooks
plwikibooks
https://pl.wikibooks.org/wiki/Wikibooks:Strona_g%C5%82%C3%B3wna
MediaWiki 1.47.0-wmf.14
first-letter
Media
Specjalna
Dyskusja
Wikipedysta
Dyskusja wikipedysty
Wikibooks
Dyskusja Wikibooks
Plik
Dyskusja pliku
MediaWiki
Dyskusja MediaWiki
Szablon
Dyskusja szablonu
Pomoc
Dyskusja pomocy
Kategoria
Dyskusja kategorii
Wikijunior
Dyskusja Wikijuniora
TimedText
TimedText talk
Moduł
Dyskusja modułu
Wydarzenie
Dyskusja wydarzenia
Moduł:StronicowyParser/ZbieranieDanychStron
828
55009
551265
547978
2026-08-10T17:29:26Z
Persino
2851
551265
Scribunto
text/plain
local p={};
function p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,lista_dwuelementowa,kod)
if(lista_dwuelementowa)then
local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
if(not tab_obiekt)then
tabela_elementow_strony_kodow[nazwa_obiektu]={};
tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
end;
local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
if(not uchwyty_bez_numeracji)then
tab_obiekt.uchwyty_bez_numeracji={};
uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
end;
uchwyty_bez_numeracji[kod]=lista_dwuelementowa;
end;
end;
function p.WydobywanieUchwytuZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,kod)
local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
if(not tab_obiekt)then return nil;end;
local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
if(uchwyty_bez_numeracji)then
return uchwyty_bez_numeracji[kod];
end;
end;
function p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie)
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
kod_uchwytu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(kod_uchwytu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or kod_uchwytu;
local html_modul=require("Module:Html");
kod_uchwytu=html_modul.DecodeHtml(kod_uchwytu,true);
if(kod_uchwytu~="")then
KtorySzablonMaZwracacKategorie(kod_uchwytu);
local lista_dwuelementowa={};
lista_dwuelementowa[1]=kod_uchwytu;
local parametry_modul=require("Module:Parametry");
if((not tablica_zmiennych.sprawdzenie_dokonane_obiektu)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu])))then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu);
end;
tablica_zmiennych.sprawdzenie_dokonane_obiektu=true;
end;
if(tab_numer)then
tab_numer[nazwa_obiektu]=tab_numer[nazwa_obiektu]+1;
local numer=tab_numer[nazwa_obiektu];
table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],numer,lista_dwuelementowa);
else
table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa);
end;
return lista_dwuelementowa;
end;
end;
function p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie)
local kod_uchwytu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[numer_numeracji];
if(kod_uchwytu)then
local lista_dwuelementowa=p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return lista_dwuelementowa;
end;
end;
function p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then
if(nazwa_artykulu=="")then return;end;
local czy_element_wystepuje_w_tablicy=false;
local tablica_przestrzeni_wszystkiego=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron;
if(tablica_przestrzeni_wszystkiego)then
local tabela_przestrzeni_ksiazek=tablica_przestrzeni_wszystkiego[nazwa_przestrzeni];
if(tabela_przestrzeni_ksiazek)then
local tabela_ksiazek=tabela_przestrzeni_ksiazek[nazwa_przestrzeni_ksiazki]
if(tabela_ksiazek)then
local tab_ksiazki=tabela_ksiazek[nazwa_ksiazki];
if(tab_ksiazki)then
if(tab_ksiazki.spis)then
--czy_lista_niepusta=true;
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
for _,tab_value in ipairs(tab_ksiazki.spis)do
if(tab_value[2])then
for _,artykul_w_bazie_element in ipairs(tab_value[2])do
local artykul_w_bazie=artykul_w_bazie_element[1];
local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie);
artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie;
local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie);
if(artykul_bez_naglowka_w_bazie==nazwa_artykulu)then
czy_element_wystepuje_w_tablicy=true;
break;
end;
end;
end;
if(czy_element_wystepuje_w_tablicy)then break;end;
end;
end;
end;
end;
end;
end;
if(not czy_element_wystepuje_w_tablicy)then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu~=nazwa_przestrzeni_ksiazki)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu~=nazwa_ksiazki)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=nazwa_artykulu))then
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych stron",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"))then
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisu treści do korzystanych stron");
end;
end;
end;
end;
end;
function p.PusteParametryReferencji(self, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu)
local czy_ksiazka_z_tylko_odstepami_lub_pusty=(nazwa_ksiazki)and (nazwa_ksiazki=="") or nil;
local czy_artykul_z_tylko_odstepami_lub_pusty=(nazwa_artykulu)and (nazwa_artykulu=="") or nil;
local czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty=(uchwyt_obiektu)and (uchwyt_obiektu=="") or nil;
----
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
----
if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1);
end;
end;
if(czy_artykul_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2);
end;
end;
if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3);
end;
end;
end;
function p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca,bezuchwytowe)
local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[bezuchwytowe and 1 or 2];
local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[bezuchwytowe and 2 or 3];
local parametry_modul=require("Module:Parametry");
local nazwy_modul=require("Module:Nazwy");
local html_modul=require("Module:Html");
if(nazwa_artykulu)then
nazwa_artykulu=html_modul.DecodeHtml(nazwa_artykulu,true);
local techniczne_modul=require("Module:Techniczne");
nazwa_artykulu=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=nazwa_artykulu,[2]="",};
end;
local nazwa_ksiazki;local nazwa_przestrzeni_ksiazki;local nazwa_przestrzeni;
if(pelna_nazwa_ksiazki)then
pelna_nazwa_ksiazki=html_modul.DecodeHtml(pelna_nazwa_ksiazki,true);
local techniczne_modul=require("Module:Techniczne");
pelna_nazwa_ksiazki=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=pelna_nazwa_ksiazki,[2]=nazwa_modulu_aktualna_czy_biezaca,};
----
local tabela_nazw={};
local ksiazkowe_modul=require("Module:Książkowe");
pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)));
--pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
end;
return nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu;
end;
function p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst,tab_nazwy)
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu;
if(not czy_inna_wartosc_tekst)then
nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,true);
else
nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=tab_nazwy[1],tab_nazwy[2],tab_nazwy[3],tab_nazwy[4];
end;
--local ksiazkowe_modul=require("Module:Książkowe");
--pelna_nazwa_ksiazki=pelna_nazwa_ksiazki or ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"]();
--nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"]();
if((nazwa_przestrzeni)or(nazwa_przestrzeni_ksiazki)or(nazwa_ksiazki)or(nazwa_artykulu))then
local tabela_nazw={};
local ksiazkowe_modul=require("Module:Książkowe");
local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw);
local nazwa_przestrzeni_ksiazki=nazwa_przestrzeni_ksiazki or ksiazkowe_modul["NazwaPrzestrzeniKsiążki"](nil,tabela_nazw);
local nazwa_ksiazki=nazwa_ksiazki or ksiazkowe_modul["NazwaTytułuKsiążki"](nil,tabela_nazw);
local nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](nil,tabela_nazw);
if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end;
local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false);
end;
end;
function p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,czy_szablon_pudelkowy_strony_zbiorczej,KtorySzablonMaZwracacKategorie)
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not nazwa_przestrzeni)and(not nazwa_jednostki))then return;end;
local parametry_modul=require("Module:Parametry");
if((nazwa_jednostki) and (nazwa_jednostki==""))then return;end;
local szablonowe_modul=require("Module:Szablonowe");
if((nazwa_jednostki and mw.ustring.match(nazwa_jednostki,szablonowe_modul.NormaWzoruKodowaniaTekstu()))
or (nazwa_przestrzeni and mw.ustring.match(nazwa_przestrzeni,szablonowe_modul.NormaWzoruKodowaniaTekstu()))
)then return;end;
local nazwy_modul=require("Module:Nazwy");
local ksiazkowe_modul=require("Module:Książkowe");
local html_modul=require("Module:Html");
if(nazwa_jednostki)then
nazwa_jednostki=html_modul.DecodeHtml(nazwa_jednostki,true);
end;
local tabela_nazw_art={};
local nazwa_jednostki=(nazwa_jednostki
and mw.ustring.gsub(nazwa_jednostki,"^([^#]*)#(.*)$","%1")
or nil
) or ksiazkowe_modul["NazwaArtykułu"](nil,tabela_nazw_art);
if(nazwa_przestrzeni)then
nazwa_przestrzeni=html_modul.DecodeHtml(nazwa_przestrzeni,true);
end;
local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw_art);
local strona=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
local techniczne_modul=require("Module:Techniczne");
strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=self.nazwa_modulu_biezaca,};
--strona=ksiazkowe_modul["PEŁNANAZWASTRONY"](strona);
local tabela_nazw={};
local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw);
local nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw);
local nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw)));
local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazw);
if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end;
local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,nil,czy_szablon_pudelkowy_strony_zbiorczej);
end;
function p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca)
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca);
local nazwy_modul=require("Module:Nazwy");
local czy_inna_wartosc_tekst=true;
if((nazwa_artykulu)and(nazwa_ksiazki))then
--local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwy_modul["NazwaModułu"]("",nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
elseif((nazwa_artykulu)and(not nazwa_ksiazki))then
local ksiazkowe_modul=require("Module:Książkowe");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"]();
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or (ksiazkowe_modul["NazwaKsiążki"]()..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or ""));
----
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
elseif((not nazwa_artykulu)and(nazwa_ksiazki))then
local ksiazkowe_modul=require("Module:Książkowe");
local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"]();
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ksiazkowe_modul["NazwaKsiążki"]();
----
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
else
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
end;
end;
function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA_SPRAWDZANIE)
local pudelko_modul=require("Module:Pudełko");
if(((nazwa_przestrzeni)and(((nazwa_przestrzeni~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni)))or(nazwa_przestrzeni=="")))
and((nazwa_przestrzeni_ksiazki)and(((nazwa_przestrzeni_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni_ksiazki)))or(nazwa_przestrzeni_ksiazki=="")))
and((nazwa_ksiazki)and(nazwa_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_ksiazki)))
and((nazwa_artykulu)and(((nazwa_artykulu~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_artykulu)))or(nazwa_artykulu=="")))
)then
if(__FUNKCJA_SPRAWDZANIE)then
__FUNKCJA_SPRAWDZANIE(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
end;
else
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron");
end;
else
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron");
end;
end;
end;
end;
function p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz)
local linkobiekttab=tablica_zmiennych.linkobiekt[nazwa_obiektu];
local parametry_modul=require("Module:Parametry");
if((not tablica_zmiennych.sprawdzenie_dokonane_linku)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](linkobiekttab)))then
local parametry_modul=require("Module:Parametry");
local nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
local nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
local nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
local nazwa_artykulu=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu;
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
tablica_zmiennych.sprawdzenie_dokonane_linku=true;
end;
table.insert(linkobiekttab,uchwyt_obiektu);
if(czy_pobierz)then
if(not tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane)then
tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane={};
end;
table.insert(tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane,{{nazwa_obiektu,uchwyt_obiektu,},{obiekt,kod,},});
end;
end;
function p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz)
p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,function()
local parametry_modul=require("Module:Parametry");
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu))then
local tablica_zmiennych2={};
tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2={}
local tabela_listy_danych_analizy_ksiazki0,tablica_zmiennych2,czy_inna=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2);
if(tabela_listy_danych_analizy_ksiazki0)then
if((not czy_inna)or(not tablica_zmiennych2))then return;end;
local stronicowyparser_szablony_tekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
local JuzPoliczone=function()
if(czy_pobierz)then
stronicowyparser_szablony_tekstu_modul.UstawianiePobierz(tablica_zmiennych,tablica_zmiennych2,obiekt,kod,nazwa_obiektu,uchwyt_obiektu,false);
end;
if(not tablica_zmiennych2.dane_juz_policzone)then tablica_zmiennych2.dane_juz_policzone={};end;
local tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu];
if(not tab_nazwa_obiektu)then
tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]={};
tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu];
end;
local tab_uchwyt=tab_nazwa_obiektu[uchwyt_obiektu];
if(tab_uchwyt)then
return true;
end;
tab_nazwa_obiektu[uchwyt_obiektu]=true;
return false;
end;
if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then
local czy_policzone=JuzPoliczone();
if(czy_policzone)then
return;
end;
else
JuzPoliczone();
end;
stronicowyparser_szablony_tekstu_modul.DodawanieDoBazySzablonuTekstuStronyKorzystanejElementyInnejStrony(tablica_zmiennych,tablica_zmiennych2);
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
local czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2=tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu];
local CzyLink=czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2.CzyLink;
local ile_razy=0;
if(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2)then
for _, parametry_obiektu in ipairs(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2) do
if(parametry_obiektu[1]==uchwyt_obiektu)then
ile_razy=ile_razy+1;
if(ile_razy>1)then break;end;
end;
end;
end
if(ile_razy~=1)then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu);
end;
p.PusteParametryReferencji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
else
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera");
end;
end;
else
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
end);
end;
function p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,czy_pobierz)
local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1];
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca);
----
local parametry_modul=require("Module:Parametry");
if(parametry_modul.CzyTak(uchwyt_obiektu))then
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
uchwyt_obiektu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(uchwyt_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or uchwyt_obiektu;
local html_modul=require("Module:Html");
uchwyt_obiektu=html_modul.DecodeHtml(uchwyt_obiektu,true);
end;
----
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
----
if(parametry_modul.CzyTak(uchwyt_obiektu))then
nazwa_artykulu=(nazwa_artykulu or (nazwa_ksiazki and "" or nil));
if(nazwa_artykulu)then
if(nazwa_artykulu~="")then
if(not nazwa_ksiazki)then
nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
elseif(nazwa_ksiazki=="")then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
return;
end;
elseif((nazwa_ksiazki)and(nazwa_ksiazki~=""))then
nazwa_artykulu="";
elseif((nazwa_ksiazki)and(nazwa_ksiazki==""))then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
return;
else
nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
end;
if((nazwa_przestrzeni~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)
or(nazwa_przestrzeni_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)
or(nazwa_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)
or(nazwa_artykulu~=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then
p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz);
else
p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz);
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
else
p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz)
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then
p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,nil);
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu))then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu);
end;
KtorySzablonMaZwracacKategorie(uchwyt_obiektu);
end;
function p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, czy_artykul_korzystany,tablica_zmiennych,czy_szablon_pudelkowy_strony_zbiorczej)
local function __FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni])then self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]={};end;
local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
if(not tablica_przestrzeni[nazwa_przestrzeni_ksiazki])then tablica_przestrzeni[nazwa_przestrzeni_ksiazki]={};end;
local tablica_przestrzeni_ksiazki=tablica_przestrzeni[nazwa_przestrzeni_ksiazki];
if(not tablica_przestrzeni_ksiazki[nazwa_ksiazki])then tablica_przestrzeni_ksiazki[nazwa_ksiazki]={};end;
local tablica_ksiazki=tablica_przestrzeni_ksiazki[nazwa_ksiazki];
if(not tablica_ksiazki.lista_podstron_woluminu)then tablica_ksiazki.lista_podstron_woluminu={};end;
if(nazwa_artykulu)then
if(not tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu])then tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]={};end;
local artykul_analizowany=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu];
return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany;
else
return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki;
end;
end;
local function __FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if(not czy_artykul_korzystany)then
if(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu)then
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then
return 0,nil,nil,nil,nil,nil,self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron,false;
else
if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=true;
end;
end;
else
return nil;
end;
end;
if(self.tabela_listy_danych_analizy_ksiazki)then
if(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron)then
local tabela_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
if(tabela_przestrzeni)then
local tabela_przestrzeni_ksiazki=tabela_przestrzeni[nazwa_przestrzeni_ksiazki];
if(tabela_przestrzeni_ksiazki)then
local tabela_ksiazka=tabela_przestrzeni_ksiazki[nazwa_ksiazki];
if(tabela_ksiazka)then
local lista_artykolow=tabela_ksiazka.lista_podstron_woluminu;
if(lista_artykolow)then
local tabela_artykul=lista_artykolow[nazwa_artykulu];
if(tabela_artykul)then
local dane_zebrane_ze_stron=tabela_artykul.dane_zebrane_ze_stron;
----
if(tabela_artykul.TOCSPIS_FUNCTION)then
local wynik=tabela_artykul.TOCSPIS_FUNCTION();
if(wynik)then
tabela_artykul.TOCSPIS_FUNCTION=nil;
end;
end;
return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,true;
end;
end;
end;
end;
end;
else
return nil;
end;
else
return nil;
end;
return true;
end;
local nazwy_modul=require("Module:Nazwy");
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,czy_inna=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local function StronaSubstFunkcja(tabela_artykul,spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if((czy_szablon_pudelkowy_strony_zbiorczej)and(not czy_artykul_korzystany)and(tabela_artykul)and(not tabela_artykul.strona_zbiorcza))then
--local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
local TakFun=function(frame) return "tak";end;local NieFun=function(frame) return "";end;
tabela_artykul.strona_zbiorcza=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
end;
if(not wartosc_wyniku)then
return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna;
end;
----
local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((nazwa_przestrzeni~=nazwy_np_modul.Main)
and(nazwa_przestrzeni~=nazwy_np_modul.Wikijunior)
and((nazwa_przestrzeni~=nazwy_np_modul.User)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$")))
and((nazwa_przestrzeni~=nazwy_np_modul.Wikibooks)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$")))
)then
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
----
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local parametry_modul=require("Module:Parametry");
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
----
local tekst_rozwiniety_calego_artykulu_ref=nil;
local tablica_analizy_obiektow_strony_dany_modul_ref=nil;
local tablica_danych_parametrow_szablonu_strony_ref=nil;
----
local function InneInformacjePrzebneDoAnalizowanejKsiazki()
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"])then self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"]="tak";end;
end;
local czy_ksiazka_istnieje_w_tablicy=((tablica_ksiazki)and(tablica_ksiazki.czy_spis_analizowano))and true or false;
if(not czy_ksiazka_istnieje_w_tablicy)then
tablica_ksiazki.czy_spis_analizowano=true;
local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści");
local nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp;
local tabela_artykulow,tabela_licencji_spisu_tresci,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci=stronicowyparser_spistresci_modul.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,function(nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona)
local tablica_przestrzeni_strona=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni_strona];
if(tablica_przestrzeni_strona)then
local tablica_przestrzeni_ksiazki_strona=tablica_przestrzeni_strona[nazwa_przestrzeni_ksiazki_strona];
if(tablica_przestrzeni_ksiazki_strona)then
local tablica_ksiazki_strona=tablica_przestrzeni_ksiazki_strona[nazwa_ksiazki_strona];
if(tablica_ksiazki_strona)then
if(tablica_ksiazki_strona.spis)then
nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp=nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona;
tablica_ksiazki.spis=tablica_ksiazki_strona.spis;
tablica_ksiazki.licencja=tablica_ksiazki_strona.licencja;
tablica_ksiazki.nazwa_bazowego_spisu=tablica_ksiazki_strona.nazwa_bazowego_spisu;
tablica_ksiazki.tab_inne_spisy=tablica_ksiazki_strona.tab_inne_spisy;
tablica_ksiazki.dodatkowe_strony_woluminu=tablica_ksiazki_strona.dodatkowe_strony_woluminu;
tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=tablica_ksiazki_strona.adres_woluminu_bazowego_spisu_rzeczy;
tablica_ksiazki.referencja_do_nowej_formy_spisu={tablica_przestrzeni_strona,tablica_przestrzeni_ksiazki_strona,tablica_ksiazki_strona,};
return 1;
end;
end;
end
end;
end,function(tekst_rozwiniety_calego_artykulu_ref_spis,nazwa_przestrzeni_ref_spis,nazwa_przestrzeni_ksiazki_ref_spis,nazwa_ksiazki_ref_spis,nazwa_artykulu_ref_spis,tablica_analizy_obiektow_strony_dany_modul_ref_spis,tablica_danych_parametrow_szablonu_strony_ref_spis)
----
if((nazwa_przestrzeni==nazwa_przestrzeni_ref_spis)and(nazwa_przestrzeni_ksiazki==nazwa_przestrzeni_ksiazki_ref_spis)and(nazwa_ksiazki==nazwa_ksiazki_ref_spis)and(nazwa_artykulu==nazwa_artykulu_ref_spis))then
tekst_rozwiniety_calego_artykulu_ref=tekst_rozwiniety_calego_artykulu_ref_spis;
local parametry_modul=require("Module:Parametry");
tablica_analizy_obiektow_strony_dany_modul_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_analizy_obiektow_strony_dany_modul_ref_spis);
tablica_danych_parametrow_szablonu_strony_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_danych_parametrow_szablonu_strony_ref_spis);
end;
----
end);
local function __FUNKCJA_SPISU(tablica_ksiazki,czy_podac_adres)
tablica_ksiazki.spis=tabela_artykulow;
if(czy_artykul_korzystany)then
tablica_ksiazki.licencja=tabela_licencji_spisu_tresci;
end;
tablica_ksiazki.nazwa_bazowego_spisu=nazwa_glownego_spisu;
tablica_ksiazki.tab_inne_spisy=tab_inne_spisy;
tablica_ksiazki.dodatkowe_strony_woluminu=dodatkowe_artykuly;
tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=czy_podac_adres and adres_ksiazki_glownego_spisu_tresci or nil;
end;
if(tabela_artykulow==0)then
if(czy_artykul_korzystany)then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"korzystana strona główna nie istnieje");
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"dołączone strony główne nie istnieją",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
elseif(tabela_artykulow)then
if(parametry_modul.TypeTable(tabela_artykulow))then
if(adres_ksiazki_glownego_spisu_tresci)then
__FUNKCJA_SPISU(tablica_ksiazki,true);
local tablica_ksiazki_stara=tablica_ksiazki;
local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true);
local nazwa_przestrzeni=adres_ksiazki_glownego_spisu_tresci[1];
local nazwa_przestrzeni_ksiazki=adres_ksiazki_glownego_spisu_tresci[2];
local nazwa_ksiazki=adres_ksiazki_glownego_spisu_tresci[3];
if((kod_wyniku==1)or(kod_wyniku==2))then
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
if(not wartosc_wyniku)then
return wartosc_wyniku,true;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
local nazwa_artykulu=artykul;
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,true;
end;
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni ,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,};
__FUNKCJA_SPISU(tablica_ksiazki,false);
return nil,nil,artykul,kod_wyniku;
elseif((kod_wyniku==3)or(kod_wyniku==4))then
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,};
__FUNKCJA_SPISU(tablica_ksiazki,false);
return nil,nil,artykul,kod_wyniku;
end;
else
__FUNKCJA_SPISU(tablica_ksiazki,false);
end;
elseif(tabela_artykulow~=1)then
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(not wartosc_wyniku)then
return wartosc_wyniku,true;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,true;
end;
end;
else
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"))then
if(((self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=="")and(nazwa_artykulu~=""))or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=""))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych książek na ich stronach głównych",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
end;
end;
end;
end;
end;
----
local wartosc_wyniku,wynik_bledu,artykul_bazowy,kod_wyniku_bazowy=InneInformacjePrzebneDoAnalizowanejKsiazki();
if(wynik_bledu)then return wartosc_wyniku;end;
local kod_wyniku_przekierowan=kod_wyniku_bazowy;
----
--if((not tablica_przestrzeni)or(not tablica_przestrzeni_ksiazki)or(not tablica_ksiazki)or(not artykul_analizowany))then
-- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
--end;
----
if((tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy)and(kod_wyniku_bazowy))--[[and((kod_wyniku_bazowy==1)or(kod_wyniku_bazowy==2))]]then
----
nazwa_przestrzeni=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[1];
nazwa_przestrzeni_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[2];
nazwa_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[3];
nazwa_artykulu=artykul_bazowy;
----
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=tablica_ksiazki.referencja_do_nowej_formy_spisu[1],tablica_ksiazki.referencja_do_nowej_formy_spisu[2],tablica_ksiazki.referencja_do_nowej_formy_spisu[3];
end;
local tabela_artykulow=tablica_ksiazki.spis;
if(tabela_artykulow)then
local nazwa_glownego_spisu=tablica_ksiazki.nazwa_bazowego_spisu;
local tab_inne_spisy=tablica_ksiazki.tab_inne_spisy;
local dodatkowe_artykuly=tablica_ksiazki.dodatkowe_strony_woluminu
local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,false);
if(kod_wyniku)then
nazwa_artykulu=artykul;
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
kod_wyniku_przekierowan=kod_wyniku_przekierowan or kod_wyniku;
end;
local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local PrzekierownieAwaryjne=function()
if(not kod_wyniku_przekierowan)then
--local artykul2,kod_wyniku2=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true);
local techniczne_modul=require("Module:Techniczne");
local strona=techniczne_modul.PrzekierowanieDoStrony(nazwa_modulu);
if(strona)then
if(strona~=nazwa_modulu)then
----
local tabela_nazw={};
nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw);
nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw);
nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw) or nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw));
nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazwa);
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(not wartosc_wyniku)then
return wartosc_wyniku;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku;
end;
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
nazwa_modulu=strona;
else
return 0;
end;
end;
end;
end;
local wynik=PrzekierownieAwaryjne();
if(czy_artykul_korzystany)then
self.nazwa_modulu_biezaca=nazwa_modulu;
end;
if(wynik)then return wynik;end;
----
if(czy_artykul_korzystany)then
if((not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then
self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni;
self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu=nazwa_przestrzeni_ksiazki;
self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu=nazwa_ksiazki;
self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=nazwa_artykulu;
end;
end;
local nazwa_modulu_aktualna_czy_biezaca=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu) or nazwa_modulu;
-- przydzielanie tablicy
if(czy_artykul_korzystany)then
artykul_analizowany.artykul_biezacy=true;
tablica_ksiazki.ksiazka_analizowana=true;
end;
--koniec
--local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}");
if(not tablica_zmiennych)then tablica_zmiennych={};end;
if(not tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2)then tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={};end;
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
for _,element_w_tablicy_obiekt in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do
local CzyLink=element_w_tablicy_obiekt.CzyLink;
local CzyNum=element_w_tablicy_obiekt.CzyNum;
local wartosc=element_w_tablicy_obiekt[1];
tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum,};
if(czy_artykul_korzystany)then tablica_zmiennych.linkobiekt[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum;};end;
end;
local function StronaZbiorcza()
if(czy_artykul_korzystany)then
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end;
local wynik=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,tablica_ksiazki.spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
artykul_analizowany.strona_zbiorcza=(wynik and "tak" or "");
return wynik;
end;
return nil;
end;
local strona_zbiorcza=StronaZbiorcza();
local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
----
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony;
if((not tekst_rozwiniety_calego_artykulu_ref)or(not tablica_analizy_obiektow_strony_dany_modul_ref)or(not tablica_danych_parametrow_szablonu_strony_ref))then
tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))and true or nil),
nil)
else
tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=tekst_rozwiniety_calego_artykulu_ref,tablica_analizy_obiektow_strony_dany_modul_ref,tablica_danych_parametrow_szablonu_strony_ref;
end;
----
if(not czy_artykul_korzystany)then
if(not tekst_rozwiniety_calego_artykulu)then return 0;end;
end;
if(czy_artykul_korzystany)then
if(not tekst_rozwiniety_calego_artykulu)then
if(strona_zbiorcza)then
self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak";
end;
return nil;
end;
end;
local szablonowe_modul=require("Module:Szablonowe");
local parametry_modul=require("Module:Parametry");
if((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))then
local aktualna_nazwa_modulu=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwa_modulu_aktualna_czy_biezaca or nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu);
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(self,aktualna_nazwa_modulu);
if(tekst)then
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,aktualna_nazwa_modulu);
local tablica_danych_parametrow_szablonu_strony={};
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,aktualna_nazwa_modulu,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
if(stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
return true;
elseif(stronicowyparser_obiekty_modul.strona_start[nazwa_szablonu])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or "";
local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC";
if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return true;
end;
end);
if(wynik)then break;end;
end;
end;
end;
end;
local uzyskano_w_wyniku_parsowania_wywolanie_szablonu;
local analiza_stron_korzystanych_zbiorczych=nil;
local stronastart=nil;
----
local tablica_obiekty=stronicowyparser_obiekty_modul.obiekty;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty;
local format_elementowy_referencji_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_referencji_obiektowy;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu;
local szablony_wykorzystywane_przez_strony_zbiorcze=stronicowyparser_obiekty_modul.szablony_wykorzystywane_przez_strony_zbiorcze;
local format_elementowy_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_obiektowy;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu;
----
local strona_start=stronicowyparser_obiekty_modul.strona_start;
local strona_start_ze_spisem_rzeczy_strony=stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony;
local strona_start_inne=stronicowyparser_obiekty_modul.strona_start_inne;
local szablony_strony_zbiorczej=stronicowyparser_obiekty_modul.strona_zbiorcza;
----
local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe;
local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe;
local tab_szablony_stronicowe_formatowania_tekstu=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu;
local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego;
----
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
local tabela_elementow_strony_kodow={};
-- for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do
local function AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer)
if(czy_artykul_korzystany)then
if(tabela_parametrow_szablonu)then
if((not stronastart)and(self.tabela_listy_danych_analizy_ksiazki.formatowanie==nil))then
if(strona_start[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
stronastart=true;
local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or "";
local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC";
if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return;
elseif(strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
stronastart=true;
return;
elseif(strona_start_inne[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
stronastart=true;
return;
elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
analiza_stron_korzystanych_zbiorczych=true;
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not parametry_modul.CzyTak(nazwa_prestreni_nazw))and(not parametry_modul.CzyTak(nazwa_jednostki)))then
return;
end;
end;
elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
analiza_stron_korzystanych_zbiorczych=true;
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not parametry_modul.CzyTak(nazwa_przestrzeni))and(not parametry_modul.CzyTak(nazwa_jednostki)))then
return;
end;
end;
end;
end;
local plik=mw.ustring.match(nazwa_szablonu_wywolania,"^:");
if(plik==nil)then
if(tabela_parametrow_szablonu)then
if(not parametry_modul.CzyTak(tabela_parametrow_szablonu["bez automatu"]))then
local czy_wypowiedzenie=(nazwa_szablonu_wywolania=="Wypowiedzenie");
local czy_linkobiekt;
local czy_link;local czy_pobierz;
local czy_wypowiedzenie_z_parametrami;
local czy_linkobiekt_z_parametrami;
if(czy_wypowiedzenie)then
czy_linkobiekt=false;
czy_link=false;
czy_pobierz=false;
czy_wypowiedzenie_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["rodzaj"]);
else
czy_linkobiekt=(nazwa_szablonu_wywolania=="LinkObiekt");
if(czy_linkobiekt)then
czy_link=true;
czy_pobierz=false;
czy_linkobiekt_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["typ"]);
else
czy_link=mw.ustring.match(nazwa_szablonu_wywolania,"^Link");
czy_pobierz=(not czy_link) and mw.ustring.match(nazwa_szablonu_wywolania,"^Pobierz") or nil;
end;
end;
if((not czy_link)and(not czy_pobierz))then
local wartosc_elementu;local numer_uchwytu;
if(not czy_wypowiedzenie_z_parametrami) then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania];
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
else
local rodzaj=tabela_parametrow_szablonu["rodzaj"];
if(rodzaj)then
wartosc_elementu=format_elementowy_obiektowy[rodzaj] and rodzaj or nil;
if(wartosc_elementu)then
numer_uchwytu=tablica_obiekty[5];
end;
end;
end;
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
end;
elseif(czy_artykul_korzystany)then
if(czy_link)then
local wartosc_elementu;
if(not czy_linkobiekt_z_parametrami)then
wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania];
else
local typ=tabela_parametrow_szablonu["typ"];
if(typ)then
typ=format_elementowy_referencji_obiektowy[typ] and typ or nil;
if(typ)then
wartosc_elementu=mw.getContentLanguage():ucfirst(typ);
end;
end;
end;
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Link"..wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
else
local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu[nazwa_szablonu_wywolania];
if(wartosc_elementu)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
else
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
end;
return;
end;
end;
elseif(czy_pobierz)then
local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania];
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,true);
return;
end;
end;
end;
if(czy_wypowiedzenie)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Obiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artykul_korzystany,tablica_obiekty[5],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu[nazwa_szablonu_wywolania])then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka[nazwa_szablonu_wywolania];
local wartosc_elementu;local numer_uchwytu;
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,wartosc_elementu,lista_dwuelementowa,kod);
if(czy_artykul_korzystany)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return;
elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_tekstu[nazwa_szablonu_wywolania])then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania];
local wartosc_elementu;local numer_uchwytu;
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
if(lista_dwuelementowa)then
local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
local tekst=stronicowyparser_szablonytekstu_modul.ParametrTekstowySzablonuTekstu(tabela_parametrow_szablonu);
local bez_preprocess=stronicowyparser_szablonytekstu_modul.SzablonTekstuBezPreProcess(tabela_parametrow_szablonu);
local czy_bez_preprocess=parametry_modul.CzyTak(bez_preprocess);
if(tekst)then
local czy_szablon_wszystko=false;
tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul,
function(szablon,obiekt,kod)
if(czy_bez_preprocess)then return nil;end;
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
if(
(tab_szablony[nazwa_szablonu])
or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu])
or(tab_szablony_stronicowe_formatowania_tekstu[nazwa_szablonu])
or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu])
)then
if(not czy_artykul_korzystany)then
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=tabela_parametrow_szablonu["nazwa jednostki"] or (((nazwa_przestrzeni_ksiazki~="") and (nazwa_przestrzeni_ksiazki.."/") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or ""))
if(self)then
local czy_link_lub_pobierz=mw.ustring.match(nazwa_szablonu,"^Link") or mw.ustring.match(nazwa_szablonu,"^Pobierz");
if(czy_link_lub_pobierz)then
p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca);
else
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu);
end;
end;
end;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end;
return nil;
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- instrukcje warunkowe;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- wywołania ramek Lua w Scribunto
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- tagi szablonowe;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end);
czy_szablon_wszystko=czy_szablon_wszystko or true;
if(wynik)then return wynik;end;
elseif(obiekt=="ZMIENNA")then
czy_szablon_wszystko=czy_szablon_wszystko or true;
local zawartosc=mw.ustring.match(szablon,"^{{{(.*)}}}$");
if(zawartosc)then
zawartosc=mw.ustring.gsub(zawartosc,"|","{{!}}");
return "{{(((}}"..zawartosc.."{{)))}}";
end;
end;
end);
if((czy_szablon_wszystko)and(not bez_preprocess))then
local frame=mw.getCurrentFrame();
tekst=frame:preprocess(tekst);
end;
lista_dwuelementowa[2]=tekst;
end;
--local __metatabelka=getmetatable(tabela_parametrow_szablonu);
--if(__metatabelka)then setmetatable(tabela_parametrow_szablonu,nil);end;
stronicowyparser_szablonytekstu_modul.DodawanieDoBazyStronySzablonuTekstu(tablica_zmiennych,wartosc_elementu,lista_dwuelementowa,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,czy_artykul_korzystany);
end;
return;
elseif(czy_artykul_korzystany)then
if(czy_linkobiekt)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="LinkObiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,"Obiekt",nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
else
if(stronicowyparser_obiekty_modul.szablony_z_lokalnym_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
return;
elseif(stronicowyparser_obiekty_modul.bez_uchwytow_spis_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
local nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2] or "";
local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1] or "";
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "")
end;
end;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie);
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
else
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
end;
return;
else
local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
local nazwy_modul=require("Module:Nazwy");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or "";
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or "";
local nazwa_symulacyjnej_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
local uchwyt=nazwa_szablonu_wywolania..":"..nazwa_symulacyjnej_strony;
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=uchwyt;
end;
end;
if((stronicowyparser_obiekty_modul.szablony_kontenerowe[nazwa_szablonu_wywolania])
or(szablony_strony_zbiorczej[nazwa_szablonu_wywolania])
)then
if(szablony_wykorzystywane_przez_strony_zbiorcze[nazwa_szablonu_wywolania])then
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie);
else
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,nil,KtorySzablonMaZwracacKategorie);
end;
return;
elseif((strona_zbiorcza)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie);
return;
end;
end;
end;
end;
end;
end;
end;
end;
----
local function GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer)
stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego);
end;
local function IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu,tab_numer)
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul);
for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do
GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer);
end;
end;
IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu);
----
local tablica_danych_nazwy_artykulu=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu] or {};
tablica_danych_nazwy_artykulu.uchwyty_i_numeracje=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2;
----
local wiki_modul=require("Module:Wiki");
tablica_danych_nazwy_artykulu.link_wikidane={wiki_modul.KodyKlasStronyNaDanejWiki{["strona"]=nazwa_modulu_aktualna_czy_biezaca,["nagłówek"]=true,["aktywny"]=true,},};
----
if(czy_artykul_korzystany)then
if(analiza_stron_korzystanych_zbiorczych)then
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
tekst_rozwiniety_calego_artykulu=stronicowyparser_stronasubst_modul.LiczOperacjeStronZbiorczych(self,tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
end;
end;
local strona;
if(czy_artykul_korzystany)then strona="";else strona=nazwa_modulu;end;
----
if(czy_artykul_korzystany)then
local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
stronicowyparser_szablonytekstu_modul.UstawPobierzKorzystanie(tablica_zmiennych);
tekst_rozwiniety_calego_artykulu=stronicowyparser_szablonytekstu_modul.AktualizowanieSzablonowychTekstowychKompletowaniaInformacjiTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,IterowaniePoElementachTekstu) or tekst_rozwiniety_calego_artykulu;
end;
----
local function SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,toc,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
return function()
local toc;
if(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane))
or((not czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)))then
----
local tablica_obiektow_strony_danych_kodow_specjalnych_modul=nil;
----
tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_danych_kodow_specjalnych_modul=szablonowe_modul:KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false);
----
local function KtorySzablonMaZwracacKategorieNaglowek(numeracja_aktualna,nazwa_szablonu)
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej");
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"powtórka nagłówek w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
end;
local function KtorySzablonMaZwracacKategorieTekst(numeracja_aktualna,nazwa_szablonu)
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej");
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"nagłowek w tekście rozdziału w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
end;
local function CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu()
return stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej");
end;
local nazwa_naglowka=stronicowyparser_obiekty_modul.nazwa_szablonu_wprowadzenia_tekstu;
local stronicowyparser_glownafunkcjazbieraniadanych_modul=require("Module:StronicowyParser/GłównaFunkcjaZbieraniaDanychStron");
local tablica_naglowka_obiekty=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_naglowka];
tablica_naglowka_obiekty.uchwyty_bez_numeracji={};
local toc=stronicowyparser_glownafunkcjazbieraniadanych_modul.SpisRzeczyWedlePodanegoTekstu(self,tekst_rozwiniety_calego_artykulu,strona, czy_artykul_korzystany,nil,tablica_naglowka_obiekty.uchwyty_bez_numeracji, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,{KtorySzablonMaZwracacKategorieNaglowek,KtorySzablonMaZwracacKategorieTekst,CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu,},nil,tabela_elementow_strony_kodow);
tablica_danych_nazwy_artykulu.TOC=toc;
return true;
end;
end;
end;
local czy_spis_function=SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,toc,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
local wynik=czy_spis_function();
if(not wynik)then
tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=czy_spis_function;
end;
StronaSubstFunkcja(tablica_danych_nazwy_artykulu,tablica_ksiazki.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(czy_artykul_korzystany)then
self.tabela_listy_danych_analizy_ksiazki.link_wikidane=tablica_danych_nazwy_artykulu.link_wikidane;
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykulu=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2;
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw[nazwa_przestrzeni_ksiazki];
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki[nazwa_ksiazki];
--self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron=tablica_zmiennych;
end;
if(not czy_artykul_korzystany)then
tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=tablica_zmiennych;
if(not self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista)then self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista={};end;
table.insert(self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista,tablica_danych_nazwy_artykulu);
else
local dane_zebrane_ze_stron_lista=self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista;
if(dane_zebrane_ze_stron_lista)then
for _,tablica_danych_nazwy_artykulu in ipairs(dane_zebrane_ze_stron_lista)do
tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=nil;
tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=nil;
end;
end;
tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane=nil;
end;
return self.tabela_listy_danych_analizy_ksiazki,tablica_zmiennych,true;
end;
return p;
a3vawtv8s6kzmzu71nyfgu5gmdskzyc
551267
551265
2026-08-10T17:49:15Z
Persino
2851
551267
Scribunto
text/plain
local p={};
function p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,lista_dwuelementowa,kod)
if(lista_dwuelementowa)then
local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
if(not tab_obiekt)then
tabela_elementow_strony_kodow[nazwa_obiektu]={};
tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
end;
local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
if(not uchwyty_bez_numeracji)then
tab_obiekt.uchwyty_bez_numeracji={};
uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
end;
uchwyty_bez_numeracji[kod]=lista_dwuelementowa;
end;
end;
function p.WydobywanieUchwytuZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,kod)
local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
if(not tab_obiekt)then return nil;end;
local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
if(uchwyty_bez_numeracji)then
return uchwyty_bez_numeracji[kod];
end;
end;
function p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie)
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
kod_uchwytu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(kod_uchwytu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or kod_uchwytu;
local html_modul=require("Module:Html");
kod_uchwytu=html_modul.DecodeHtml(kod_uchwytu,true);
if(kod_uchwytu~="")then
KtorySzablonMaZwracacKategorie(kod_uchwytu);
local lista_dwuelementowa={};
lista_dwuelementowa[1]=kod_uchwytu;
local parametry_modul=require("Module:Parametry");
if((not tablica_zmiennych.sprawdzenie_dokonane_obiektu)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu])))then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu);
end;
tablica_zmiennych.sprawdzenie_dokonane_obiektu=true;
end;
if(tab_numer)then
tab_numer[nazwa_obiektu]=tab_numer[nazwa_obiektu]+1;
local numer=tab_numer[nazwa_obiektu];
table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],numer,lista_dwuelementowa);
else
table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa);
end;
return lista_dwuelementowa;
end;
end;
function p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie)
local kod_uchwytu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[numer_numeracji];
if(kod_uchwytu)then
local lista_dwuelementowa=p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return lista_dwuelementowa;
end;
end;
function p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then
if(nazwa_artykulu=="")then return;end;
local czy_element_wystepuje_w_tablicy=false;
local tablica_przestrzeni_wszystkiego=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron;
if(tablica_przestrzeni_wszystkiego)then
local tabela_przestrzeni_ksiazek=tablica_przestrzeni_wszystkiego[nazwa_przestrzeni];
if(tabela_przestrzeni_ksiazek)then
local tabela_ksiazek=tabela_przestrzeni_ksiazek[nazwa_przestrzeni_ksiazki]
if(tabela_ksiazek)then
local tab_ksiazki=tabela_ksiazek[nazwa_ksiazki];
if(tab_ksiazki)then
if(tab_ksiazki.spis)then
--czy_lista_niepusta=true;
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
for _,tab_value in ipairs(tab_ksiazki.spis)do
if(tab_value[2])then
for _,artykul_w_bazie_element in ipairs(tab_value[2])do
local artykul_w_bazie=artykul_w_bazie_element[1];
local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie);
artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie;
local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie);
if(artykul_bez_naglowka_w_bazie==nazwa_artykulu)then
czy_element_wystepuje_w_tablicy=true;
break;
end;
end;
end;
if(czy_element_wystepuje_w_tablicy)then break;end;
end;
end;
end;
end;
end;
end;
if(not czy_element_wystepuje_w_tablicy)then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu~=nazwa_przestrzeni_ksiazki)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu~=nazwa_ksiazki)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=nazwa_artykulu))then
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych stron",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"))then
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisu treści do korzystanych stron");
end;
end;
end;
end;
end;
function p.PusteParametryReferencji(self, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu)
local czy_ksiazka_z_tylko_odstepami_lub_pusty=(nazwa_ksiazki)and (nazwa_ksiazki=="") or nil;
local czy_artykul_z_tylko_odstepami_lub_pusty=(nazwa_artykulu)and (nazwa_artykulu=="") or nil;
local czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty=(uchwyt_obiektu)and (uchwyt_obiektu=="") or nil;
----
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
----
if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1);
end;
end;
if(czy_artykul_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2);
end;
end;
if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3);
end;
end;
end;
function p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca,bezuchwytowe)
local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[bezuchwytowe and 1 or 2];
local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[bezuchwytowe and 2 or 3];
local parametry_modul=require("Module:Parametry");
local nazwy_modul=require("Module:Nazwy");
local html_modul=require("Module:Html");
if(nazwa_artykulu)then
nazwa_artykulu=html_modul.DecodeHtml(nazwa_artykulu,true);
local techniczne_modul=require("Module:Techniczne");
nazwa_artykulu=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=nazwa_artykulu,[2]="",};
end;
local nazwa_ksiazki;local nazwa_przestrzeni_ksiazki;local nazwa_przestrzeni;
if(pelna_nazwa_ksiazki)then
pelna_nazwa_ksiazki=html_modul.DecodeHtml(pelna_nazwa_ksiazki,true);
local techniczne_modul=require("Module:Techniczne");
pelna_nazwa_ksiazki=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=pelna_nazwa_ksiazki,[2]=nazwa_modulu_aktualna_czy_biezaca,};
----
local tabela_nazw={};
local ksiazkowe_modul=require("Module:Książkowe");
pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)));
--pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
end;
return nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu;
end;
function p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst,tab_nazwy)
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu;
if(not czy_inna_wartosc_tekst)then
nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,true);
else
nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=tab_nazwy[1],tab_nazwy[2],tab_nazwy[3],tab_nazwy[4];
end;
--local ksiazkowe_modul=require("Module:Książkowe");
--pelna_nazwa_ksiazki=pelna_nazwa_ksiazki or ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"]();
--nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"]();
if((nazwa_przestrzeni)or(nazwa_przestrzeni_ksiazki)or(nazwa_ksiazki)or(nazwa_artykulu))then
local tabela_nazw={};
local ksiazkowe_modul=require("Module:Książkowe");
local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw);
local nazwa_przestrzeni_ksiazki=nazwa_przestrzeni_ksiazki or ksiazkowe_modul["NazwaPrzestrzeniKsiążki"](nil,tabela_nazw);
local nazwa_ksiazki=nazwa_ksiazki or ksiazkowe_modul["NazwaTytułuKsiążki"](nil,tabela_nazw);
local nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](nil,tabela_nazw);
if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end;
local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false);
end;
end;
function p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,czy_szablon_pudelkowy_strony_zbiorczej,KtorySzablonMaZwracacKategorie)
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not nazwa_przestrzeni)and(not nazwa_jednostki))then return;end;
local parametry_modul=require("Module:Parametry");
if((nazwa_jednostki) and (nazwa_jednostki==""))then return;end;
local szablonowe_modul=require("Module:Szablonowe");
if((nazwa_jednostki and mw.ustring.match(nazwa_jednostki,szablonowe_modul.NormaWzoruKodowaniaTekstu()))
or (nazwa_przestrzeni and mw.ustring.match(nazwa_przestrzeni,szablonowe_modul.NormaWzoruKodowaniaTekstu()))
)then return;end;
local nazwy_modul=require("Module:Nazwy");
local ksiazkowe_modul=require("Module:Książkowe");
local html_modul=require("Module:Html");
if(nazwa_jednostki)then
nazwa_jednostki=html_modul.DecodeHtml(nazwa_jednostki,true);
end;
local tabela_nazw_art={};
local nazwa_jednostki=(nazwa_jednostki
and mw.ustring.gsub(nazwa_jednostki,"^([^#]*)#(.*)$","%1")
or nil
) or ksiazkowe_modul["NazwaArtykułu"](nil,tabela_nazw_art);
if(nazwa_przestrzeni)then
nazwa_przestrzeni=html_modul.DecodeHtml(nazwa_przestrzeni,true);
end;
local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw_art);
local strona=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
local techniczne_modul=require("Module:Techniczne");
strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=self.nazwa_modulu_biezaca,};
--strona=ksiazkowe_modul["PEŁNANAZWASTRONY"](strona);
local tabela_nazw={};
local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw);
local nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw);
local nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw)));
local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazw);
if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end;
local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,nil,czy_szablon_pudelkowy_strony_zbiorczej);
end;
function p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca)
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca);
local nazwy_modul=require("Module:Nazwy");
local czy_inna_wartosc_tekst=true;
if((nazwa_artykulu)and(nazwa_ksiazki))then
--local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwy_modul["NazwaModułu"]("",nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
elseif((nazwa_artykulu)and(not nazwa_ksiazki))then
local ksiazkowe_modul=require("Module:Książkowe");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"]();
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or (ksiazkowe_modul["NazwaKsiążki"]()..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or ""));
----
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
elseif((not nazwa_artykulu)and(nazwa_ksiazki))then
local ksiazkowe_modul=require("Module:Książkowe");
local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"]();
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ksiazkowe_modul["NazwaKsiążki"]();
----
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
else
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
end;
end;
function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA_SPRAWDZANIE)
local pudelko_modul=require("Module:Pudełko");
if(((nazwa_przestrzeni)and(((nazwa_przestrzeni~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni)))or(nazwa_przestrzeni=="")))
and((nazwa_przestrzeni_ksiazki)and(((nazwa_przestrzeni_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni_ksiazki)))or(nazwa_przestrzeni_ksiazki=="")))
and((nazwa_ksiazki)and(nazwa_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_ksiazki)))
and((nazwa_artykulu)and(((nazwa_artykulu~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_artykulu)))or(nazwa_artykulu=="")))
)then
if(__FUNKCJA_SPRAWDZANIE)then
__FUNKCJA_SPRAWDZANIE(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
end;
else
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron");
end;
else
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron");
end;
end;
end;
end;
function p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz)
local linkobiekttab=tablica_zmiennych.linkobiekt[nazwa_obiektu];
local parametry_modul=require("Module:Parametry");
if((not tablica_zmiennych.sprawdzenie_dokonane_linku)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](linkobiekttab)))then
local parametry_modul=require("Module:Parametry");
local nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
local nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
local nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
local nazwa_artykulu=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu;
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
tablica_zmiennych.sprawdzenie_dokonane_linku=true;
end;
table.insert(linkobiekttab,uchwyt_obiektu);
if(czy_pobierz)then
if(not tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane)then
tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane={};
end;
table.insert(tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane,{{nazwa_obiektu,uchwyt_obiektu,},{obiekt,kod,},});
end;
end;
function p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz)
p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,function()
local parametry_modul=require("Module:Parametry");
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu))then
local tablica_zmiennych2={};
tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2={}
local tabela_listy_danych_analizy_ksiazki0,tablica_zmiennych2,czy_inna=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2);
if(tabela_listy_danych_analizy_ksiazki0)then
if((not czy_inna)or(not tablica_zmiennych2))then return;end;
local stronicowyparser_szablony_tekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
local JuzPoliczone=function()
if(czy_pobierz)then
stronicowyparser_szablony_tekstu_modul.UstawianiePobierz(tablica_zmiennych,tablica_zmiennych2,obiekt,kod,nazwa_obiektu,uchwyt_obiektu,false);
end;
if(not tablica_zmiennych2.dane_juz_policzone)then tablica_zmiennych2.dane_juz_policzone={};end;
local tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu];
if(not tab_nazwa_obiektu)then
tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]={};
tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu];
end;
local tab_uchwyt=tab_nazwa_obiektu[uchwyt_obiektu];
if(tab_uchwyt)then
return true;
end;
tab_nazwa_obiektu[uchwyt_obiektu]=true;
return false;
end;
if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then
local czy_policzone=JuzPoliczone();
if(czy_policzone)then
return;
end;
else
JuzPoliczone();
end;
stronicowyparser_szablony_tekstu_modul.DodawanieDoBazySzablonuTekstuStronyKorzystanejElementyInnejStrony(tablica_zmiennych,tablica_zmiennych2);
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
local czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2=tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu];
local CzyLink=czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2.CzyLink;
local ile_razy=0;
if(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2)then
for _, parametry_obiektu in ipairs(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2) do
if(parametry_obiektu[1]==uchwyt_obiektu)then
ile_razy=ile_razy+1;
if(ile_razy>1)then break;end;
end;
end;
end
if(ile_razy~=1)then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu);
end;
p.PusteParametryReferencji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
else
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera");
end;
end;
else
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
end);
end;
function p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,czy_pobierz)
local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1];
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca);
----
local parametry_modul=require("Module:Parametry");
if(parametry_modul.CzyTak(uchwyt_obiektu))then
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
uchwyt_obiektu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(uchwyt_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or uchwyt_obiektu;
local html_modul=require("Module:Html");
uchwyt_obiektu=html_modul.DecodeHtml(uchwyt_obiektu,true);
end;
----
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
----
if(parametry_modul.CzyTak(uchwyt_obiektu))then
nazwa_artykulu=(nazwa_artykulu or (nazwa_ksiazki and "" or nil));
if(nazwa_artykulu)then
if(nazwa_artykulu~="")then
if(not nazwa_ksiazki)then
nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
elseif(nazwa_ksiazki=="")then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
return;
end;
elseif((nazwa_ksiazki)and(nazwa_ksiazki~=""))then
nazwa_artykulu="";
elseif((nazwa_ksiazki)and(nazwa_ksiazki==""))then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
return;
else
nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
end;
if((nazwa_przestrzeni~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)
or(nazwa_przestrzeni_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)
or(nazwa_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)
or(nazwa_artykulu~=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then
p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz);
else
p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz);
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
else
p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz)
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then
p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,nil);
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu))then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu);
end;
KtorySzablonMaZwracacKategorie(uchwyt_obiektu);
end;
function p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, czy_artykul_korzystany,tablica_zmiennych,czy_szablon_pudelkowy_strony_zbiorczej)
local function __FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni])then self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]={};end;
local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
if(not tablica_przestrzeni[nazwa_przestrzeni_ksiazki])then tablica_przestrzeni[nazwa_przestrzeni_ksiazki]={};end;
local tablica_przestrzeni_ksiazki=tablica_przestrzeni[nazwa_przestrzeni_ksiazki];
if(not tablica_przestrzeni_ksiazki[nazwa_ksiazki])then tablica_przestrzeni_ksiazki[nazwa_ksiazki]={};end;
local tablica_ksiazki=tablica_przestrzeni_ksiazki[nazwa_ksiazki];
if(not tablica_ksiazki.lista_podstron_woluminu)then tablica_ksiazki.lista_podstron_woluminu={};end;
if(nazwa_artykulu)then
if(not tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu])then tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]={};end;
local artykul_analizowany=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu];
return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany;
else
return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki;
end;
end;
local function __FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if(not czy_artykul_korzystany)then
if(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu)then
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then
return 0,nil,nil,nil,nil,nil,self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron,false;
else
if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=true;
end;
end;
else
return nil;
end;
end;
if(self.tabela_listy_danych_analizy_ksiazki)then
if(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron)then
local tabela_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
if(tabela_przestrzeni)then
local tabela_przestrzeni_ksiazki=tabela_przestrzeni[nazwa_przestrzeni_ksiazki];
if(tabela_przestrzeni_ksiazki)then
local tabela_ksiazka=tabela_przestrzeni_ksiazki[nazwa_ksiazki];
if(tabela_ksiazka)then
local lista_artykolow=tabela_ksiazka.lista_podstron_woluminu;
if(lista_artykolow)then
local tabela_artykul=lista_artykolow[nazwa_artykulu];
if(tabela_artykul)then
local dane_zebrane_ze_stron=tabela_artykul.dane_zebrane_ze_stron;
----
if(tabela_artykul.TOCSPIS_FUNCTION)then
local wynik=tabela_artykul.TOCSPIS_FUNCTION();
if(wynik)then
tabela_artykul.TOCSPIS_FUNCTION=nil;
end;
end;
return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,true;
end;
end;
end;
end;
end;
else
return nil;
end;
else
return nil;
end;
return true;
end;
local nazwy_modul=require("Module:Nazwy");
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,czy_inna=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local function StronaSubstFunkcja(tabela_artykul,spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if((czy_szablon_pudelkowy_strony_zbiorczej)and(not czy_artykul_korzystany)and(tabela_artykul)and(not tabela_artykul.strona_zbiorcza))then
--local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
local TakFun=function(frame) return "tak";end;local NieFun=function(frame) return "";end;
tabela_artykul.strona_zbiorcza=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
end;
if(not wartosc_wyniku)then
return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna;
end;
----
local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((nazwa_przestrzeni~=nazwy_np_modul.Main)
and(nazwa_przestrzeni~=nazwy_np_modul.Wikijunior)
and((nazwa_przestrzeni~=nazwy_np_modul.User)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$")))
and((nazwa_przestrzeni~=nazwy_np_modul.Wikibooks)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$")))
)then
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
----
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local parametry_modul=require("Module:Parametry");
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
----
local tekst_rozwiniety_calego_artykulu_ref=nil;
local tablica_analizy_obiektow_strony_dany_modul_ref=nil;
local tablica_danych_parametrow_szablonu_strony_ref=nil;
----
local function InneInformacjePrzebneDoAnalizowanejKsiazki()
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"])then self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"]="tak";end;
end;
local czy_ksiazka_istnieje_w_tablicy=((tablica_ksiazki)and(tablica_ksiazki.czy_spis_analizowano))and true or false;
if(not czy_ksiazka_istnieje_w_tablicy)then
tablica_ksiazki.czy_spis_analizowano=true;
local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści");
local nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp;
local tabela_artykulow,tabela_licencji_spisu_tresci,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci=stronicowyparser_spistresci_modul.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,function(nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona)
local tablica_przestrzeni_strona=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni_strona];
if(tablica_przestrzeni_strona)then
local tablica_przestrzeni_ksiazki_strona=tablica_przestrzeni_strona[nazwa_przestrzeni_ksiazki_strona];
if(tablica_przestrzeni_ksiazki_strona)then
local tablica_ksiazki_strona=tablica_przestrzeni_ksiazki_strona[nazwa_ksiazki_strona];
if(tablica_ksiazki_strona)then
if(tablica_ksiazki_strona.spis)then
nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp=nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona;
tablica_ksiazki.spis=tablica_ksiazki_strona.spis;
tablica_ksiazki.licencja=tablica_ksiazki_strona.licencja;
tablica_ksiazki.nazwa_bazowego_spisu=tablica_ksiazki_strona.nazwa_bazowego_spisu;
tablica_ksiazki.tab_inne_spisy=tablica_ksiazki_strona.tab_inne_spisy;
tablica_ksiazki.dodatkowe_strony_woluminu=tablica_ksiazki_strona.dodatkowe_strony_woluminu;
tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=tablica_ksiazki_strona.adres_woluminu_bazowego_spisu_rzeczy;
tablica_ksiazki.referencja_do_nowej_formy_spisu={tablica_przestrzeni_strona,tablica_przestrzeni_ksiazki_strona,tablica_ksiazki_strona,};
return 1;
end;
end;
end
end;
end,function(tekst_rozwiniety_calego_artykulu_ref_spis,nazwa_przestrzeni_ref_spis,nazwa_przestrzeni_ksiazki_ref_spis,nazwa_ksiazki_ref_spis,nazwa_artykulu_ref_spis,tablica_analizy_obiektow_strony_dany_modul_ref_spis,tablica_danych_parametrow_szablonu_strony_ref_spis)
----
if((nazwa_przestrzeni==nazwa_przestrzeni_ref_spis)and(nazwa_przestrzeni_ksiazki==nazwa_przestrzeni_ksiazki_ref_spis)and(nazwa_ksiazki==nazwa_ksiazki_ref_spis)and(nazwa_artykulu==nazwa_artykulu_ref_spis))then
tekst_rozwiniety_calego_artykulu_ref=tekst_rozwiniety_calego_artykulu_ref_spis;
local parametry_modul=require("Module:Parametry");
tablica_analizy_obiektow_strony_dany_modul_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_analizy_obiektow_strony_dany_modul_ref_spis);
tablica_danych_parametrow_szablonu_strony_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_danych_parametrow_szablonu_strony_ref_spis);
end;
----
end);
local function __FUNKCJA_SPISU(tablica_ksiazki,czy_podac_adres)
tablica_ksiazki.spis=tabela_artykulow;
if(czy_artykul_korzystany)then
tablica_ksiazki.licencja=tabela_licencji_spisu_tresci;
end;
tablica_ksiazki.nazwa_bazowego_spisu=nazwa_glownego_spisu;
tablica_ksiazki.tab_inne_spisy=tab_inne_spisy;
tablica_ksiazki.dodatkowe_strony_woluminu=dodatkowe_artykuly;
tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=czy_podac_adres and adres_ksiazki_glownego_spisu_tresci or nil;
end;
if(tabela_artykulow==0)then
if(czy_artykul_korzystany)then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"korzystana strona główna nie istnieje");
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"dołączone strony główne nie istnieją",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
elseif(tabela_artykulow)then
if(parametry_modul.TypeTable(tabela_artykulow))then
if(adres_ksiazki_glownego_spisu_tresci)then
__FUNKCJA_SPISU(tablica_ksiazki,true);
local tablica_ksiazki_stara=tablica_ksiazki;
local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true);
local nazwa_przestrzeni=adres_ksiazki_glownego_spisu_tresci[1];
local nazwa_przestrzeni_ksiazki=adres_ksiazki_glownego_spisu_tresci[2];
local nazwa_ksiazki=adres_ksiazki_glownego_spisu_tresci[3];
if((kod_wyniku==1)or(kod_wyniku==2))then
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
if(not wartosc_wyniku)then
return wartosc_wyniku,true;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
local nazwa_artykulu=artykul;
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,true;
end;
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni ,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,};
__FUNKCJA_SPISU(tablica_ksiazki,false);
return nil,nil,artykul,kod_wyniku;
elseif((kod_wyniku==3)or(kod_wyniku==4))then
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,};
__FUNKCJA_SPISU(tablica_ksiazki,false);
return nil,nil,artykul,kod_wyniku;
end;
else
__FUNKCJA_SPISU(tablica_ksiazki,false);
end;
elseif(tabela_artykulow~=1)then
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(not wartosc_wyniku)then
return wartosc_wyniku,true;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,true;
end;
end;
else
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"))then
if(((self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=="")and(nazwa_artykulu~=""))or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=""))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych książek na ich stronach głównych",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
end;
end;
end;
end;
end;
----
local wartosc_wyniku,wynik_bledu,artykul_bazowy,kod_wyniku_bazowy=InneInformacjePrzebneDoAnalizowanejKsiazki();
if(wynik_bledu)then return wartosc_wyniku;end;
local kod_wyniku_przekierowan=kod_wyniku_bazowy;
----
--if((not tablica_przestrzeni)or(not tablica_przestrzeni_ksiazki)or(not tablica_ksiazki)or(not artykul_analizowany))then
-- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
--end;
----
if((tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy)and(kod_wyniku_bazowy))--[[and((kod_wyniku_bazowy==1)or(kod_wyniku_bazowy==2))]]then
----
nazwa_przestrzeni=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[1];
nazwa_przestrzeni_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[2];
nazwa_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[3];
nazwa_artykulu=artykul_bazowy;
----
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=tablica_ksiazki.referencja_do_nowej_formy_spisu[1],tablica_ksiazki.referencja_do_nowej_formy_spisu[2],tablica_ksiazki.referencja_do_nowej_formy_spisu[3];
end;
local tabela_artykulow=tablica_ksiazki.spis;
if(tabela_artykulow)then
local nazwa_glownego_spisu=tablica_ksiazki.nazwa_bazowego_spisu;
local tab_inne_spisy=tablica_ksiazki.tab_inne_spisy;
local dodatkowe_artykuly=tablica_ksiazki.dodatkowe_strony_woluminu
local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,false);
if(kod_wyniku)then
nazwa_artykulu=artykul;
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
kod_wyniku_przekierowan=kod_wyniku_przekierowan or kod_wyniku;
end;
local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local PrzekierownieAwaryjne=function()
if(not kod_wyniku_przekierowan)then
--local artykul2,kod_wyniku2=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true);
local techniczne_modul=require("Module:Techniczne");
local strona=techniczne_modul.PrzekierowanieDoStrony(nazwa_modulu);
if(strona)then
if(strona~=nazwa_modulu)then
----
local tabela_nazw={};
nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw);
nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw);
nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw) or nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw));
nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazwa);
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(not wartosc_wyniku)then
return wartosc_wyniku;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku;
end;
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
nazwa_modulu=strona;
else
return 0;
end;
end;
end;
end;
local wynik=PrzekierownieAwaryjne();
if(czy_artykul_korzystany)then
self.nazwa_modulu_biezaca=nazwa_modulu;
end;
if(wynik)then return wynik;end;
----
if(czy_artykul_korzystany)then
if((not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then
self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni;
self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu=nazwa_przestrzeni_ksiazki;
self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu=nazwa_ksiazki;
self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=nazwa_artykulu;
end;
end;
local nazwa_modulu_aktualna_czy_biezaca=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu) or nazwa_modulu;
-- przydzielanie tablicy
if(czy_artykul_korzystany)then
artykul_analizowany.artykul_biezacy=true;
tablica_ksiazki.ksiazka_analizowana=true;
end;
--koniec
--local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}");
if(not tablica_zmiennych)then tablica_zmiennych={};end;
if(not tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2)then tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={};end;
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
for _,element_w_tablicy_obiekt in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do
local CzyLink=element_w_tablicy_obiekt.CzyLink;
local CzyNum=element_w_tablicy_obiekt.CzyNum;
local wartosc=element_w_tablicy_obiekt[1];
tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum,};
if(czy_artykul_korzystany)then tablica_zmiennych.linkobiekt[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum;};end;
end;
local function StronaZbiorcza()
if(czy_artykul_korzystany)then
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end;
local wynik=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,tablica_ksiazki.spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
artykul_analizowany.strona_zbiorcza=(wynik and "tak" or "");
return wynik;
end;
return nil;
end;
local strona_zbiorcza=StronaZbiorcza();
local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
----
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony;
if((not tekst_rozwiniety_calego_artykulu_ref)or(not tablica_analizy_obiektow_strony_dany_modul_ref)or(not tablica_danych_parametrow_szablonu_strony_ref))then
tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))and true or nil),
nil)
else
tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=tekst_rozwiniety_calego_artykulu_ref,tablica_analizy_obiektow_strony_dany_modul_ref,tablica_danych_parametrow_szablonu_strony_ref;
end;
----
if(not czy_artykul_korzystany)then
if(not tekst_rozwiniety_calego_artykulu)then return 0;end;
end;
if(czy_artykul_korzystany)then
if(not tekst_rozwiniety_calego_artykulu)then
if(strona_zbiorcza)then
self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak";
end;
return nil;
end;
end;
local szablonowe_modul=require("Module:Szablonowe");
local parametry_modul=require("Module:Parametry");
if((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))then
local aktualna_nazwa_modulu=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwa_modulu_aktualna_czy_biezaca or nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu);
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(self,aktualna_nazwa_modulu);
if(tekst)then
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,aktualna_nazwa_modulu);
local tablica_danych_parametrow_szablonu_strony={};
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,aktualna_nazwa_modulu,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
if(stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
return true;
elseif(stronicowyparser_obiekty_modul.strona_start[nazwa_szablonu])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or "";
local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC";
if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return true;
end;
end);
if(wynik)then break;end;
end;
end;
end;
end;
local uzyskano_w_wyniku_parsowania_wywolanie_szablonu;
local analiza_stron_korzystanych_zbiorczych=nil;
local stronastart=nil;
----
local tablica_obiekty=stronicowyparser_obiekty_modul.obiekty;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty;
local format_elementowy_referencji_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_referencji_obiektowy;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu;
local szablony_wykorzystywane_przez_strony_zbiorcze=stronicowyparser_obiekty_modul.szablony_wykorzystywane_przez_strony_zbiorcze;
local format_elementowy_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_obiektowy;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu;
----
local strona_start=stronicowyparser_obiekty_modul.strona_start;
local strona_start_ze_spisem_rzeczy_strony=stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony;
local strona_start_inne=stronicowyparser_obiekty_modul.strona_start_inne;
local szablony_strony_zbiorczej=stronicowyparser_obiekty_modul.strona_zbiorcza;
----
local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe;
local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe;
local tab_szablony_stronicowe_formatowania_tekstu=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu;
local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego;
----
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
local tabela_elementow_strony_kodow={};
-- for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do
local function AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer)
if(czy_artykul_korzystany)then
if(tabela_parametrow_szablonu)then
if((not stronastart)and(self.tabela_listy_danych_analizy_ksiazki.formatowanie==nil))then
if(strona_start[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
stronastart=true;
local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or "";
local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC";
if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return;
elseif(strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
stronastart=true;
return;
elseif(strona_start_inne[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
stronastart=true;
return;
elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
analiza_stron_korzystanych_zbiorczych=true;
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not parametry_modul.CzyTak(nazwa_prestreni_nazw))and(not parametry_modul.CzyTak(nazwa_jednostki)))then
return;
end;
end;
elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
analiza_stron_korzystanych_zbiorczych=true;
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not parametry_modul.CzyTak(nazwa_przestrzeni))and(not parametry_modul.CzyTak(nazwa_jednostki)))then
return;
end;
end;
end;
end;
local plik=mw.ustring.match(nazwa_szablonu_wywolania,"^:");
if(plik==nil)then
if(tabela_parametrow_szablonu)then
if(not parametry_modul.CzyTak(tabela_parametrow_szablonu["bez automatu"]))then
local czy_wypowiedzenie=(nazwa_szablonu_wywolania=="Wypowiedzenie");
local czy_linkobiekt;
local czy_link;local czy_pobierz;
local czy_wypowiedzenie_z_parametrami;
local czy_linkobiekt_z_parametrami;
if(czy_wypowiedzenie)then
czy_linkobiekt=false;
czy_link=false;
czy_pobierz=false;
czy_wypowiedzenie_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["rodzaj"]);
else
czy_linkobiekt=(nazwa_szablonu_wywolania=="LinkObiekt");
if(czy_linkobiekt)then
czy_link=true;
czy_pobierz=false;
czy_linkobiekt_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["typ"]);
else
czy_link=mw.ustring.match(nazwa_szablonu_wywolania,"^Link");
czy_pobierz=(not czy_link) and mw.ustring.match(nazwa_szablonu_wywolania,"^Pobierz") or nil;
end;
end;
if((not czy_link)and(not czy_pobierz))then
local wartosc_elementu;local numer_uchwytu;
if(not czy_wypowiedzenie_z_parametrami) then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania];
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
else
local rodzaj=tabela_parametrow_szablonu["rodzaj"];
if(rodzaj)then
wartosc_elementu=format_elementowy_obiektowy[rodzaj] and rodzaj or nil;
if(wartosc_elementu)then
numer_uchwytu=tablica_obiekty[5];
end;
end;
end;
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
end;
elseif(czy_artykul_korzystany)then
if(czy_link)then
local wartosc_elementu;
if(not czy_linkobiekt_z_parametrami)then
wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania];
else
local typ=tabela_parametrow_szablonu["typ"];
if(typ)then
typ=format_elementowy_referencji_obiektowy[typ] and typ or nil;
if(typ)then
wartosc_elementu=mw.getContentLanguage():ucfirst(typ);
end;
end;
end;
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Link"..wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
else
local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu[nazwa_szablonu_wywolania];
if(wartosc_elementu)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
else
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
end;
return;
end;
end;
elseif(czy_pobierz)then
local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania];
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,true);
return;
end;
end;
end;
if(czy_wypowiedzenie)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Obiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artykul_korzystany,tablica_obiekty[5],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu[nazwa_szablonu_wywolania])then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka[nazwa_szablonu_wywolania];
local wartosc_elementu;local numer_uchwytu;
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,wartosc_elementu,lista_dwuelementowa,kod);
if(czy_artykul_korzystany)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return;
elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_tekstu[nazwa_szablonu_wywolania])then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania];
local wartosc_elementu;local numer_uchwytu;
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
if(lista_dwuelementowa)then
local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
local tekst=stronicowyparser_szablonytekstu_modul.ParametrTekstowySzablonuTekstu(tabela_parametrow_szablonu);
local bez_preprocess=stronicowyparser_szablonytekstu_modul.SzablonTekstuBezPreProcess(tabela_parametrow_szablonu);
local czy_bez_preprocess=parametry_modul.CzyTak(bez_preprocess);
if(tekst)then
local czy_szablon_wszystko=false;
tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul,
function(szablon,obiekt,kod)
if(czy_bez_preprocess)then return nil;end;
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
if(
(tab_szablony[nazwa_szablonu])
or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu])
or(tab_szablony_stronicowe_formatowania_tekstu[nazwa_szablonu])
or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu])
)then
if(not czy_artykul_korzystany)then
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=tabela_parametrow_szablonu["nazwa jednostki"] or (((nazwa_przestrzeni_ksiazki~="") and (nazwa_przestrzeni_ksiazki.."/") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or ""))
if(self)then
local czy_link_lub_pobierz=mw.ustring.match(nazwa_szablonu,"^Link") or mw.ustring.match(nazwa_szablonu,"^Pobierz");
if(czy_link_lub_pobierz)then
p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca);
else
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu);
end;
end;
end;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end;
return nil;
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- instrukcje warunkowe;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- wywołania ramek Lua w Scribunto
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- tagi szablonowe;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end);
czy_szablon_wszystko=czy_szablon_wszystko or true;
if(wynik)then return wynik;end;
elseif(obiekt=="ZMIENNA")then
czy_szablon_wszystko=czy_szablon_wszystko or true;
local zawartosc=mw.ustring.match(szablon,"^{{{(.*)}}}$");
if(zawartosc)then
zawartosc=mw.ustring.gsub(zawartosc,"|","{{!}}");
return "{{(((}}"..zawartosc.."{{)))}}";
end;
end;
end);
if((czy_szablon_wszystko)and(not bez_preprocess))then
local frame=mw.getCurrentFrame();
tekst=frame:preprocess(tekst);
end;
lista_dwuelementowa[2]=tekst;
end;
--local __metatabelka=getmetatable(tabela_parametrow_szablonu);
--if(__metatabelka)then setmetatable(tabela_parametrow_szablonu,nil);end;
stronicowyparser_szablonytekstu_modul.DodawanieDoBazyStronySzablonuTekstu(tablica_zmiennych,wartosc_elementu,lista_dwuelementowa,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,czy_artykul_korzystany);
end;
return;
elseif(czy_artykul_korzystany)then
if(czy_linkobiekt)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="LinkObiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,"Obiekt",nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
else
if(stronicowyparser_obiekty_modul.szablony_z_lokalnym_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
return;
elseif(stronicowyparser_obiekty_modul.bez_uchwytow_spis_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
local nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2] or "";
local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1] or "";
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "")
end;
end;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie);
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
else
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
end;
return;
else
local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
local nazwy_modul=require("Module:Nazwy");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or "";
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or "";
local nazwa_symulacyjnej_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
local uchwyt=nazwa_szablonu_wywolania..":"..nazwa_symulacyjnej_strony;
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=uchwyt;
end;
end;
if((stronicowyparser_obiekty_modul.szablony_kontenerowe[nazwa_szablonu_wywolania])
or(szablony_strony_zbiorczej[nazwa_szablonu_wywolania])
)then
if(szablony_wykorzystywane_przez_strony_zbiorcze[nazwa_szablonu_wywolania])then
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie);
else
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,nil,KtorySzablonMaZwracacKategorie);
end;
return;
elseif((strona_zbiorcza)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie);
return;
end;
end;
end;
end;
end;
end;
end;
end;
----
local function GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer)
stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego);
end;
local function IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu,tab_numer)
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul);
for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do
GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer);
end;
end;
IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu);
----
local tablica_danych_nazwy_artykulu=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu] or {};
tablica_danych_nazwy_artykulu.uchwyty_i_numeracje=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2;
----
local wiki_modul=require("Module:Wiki");
tablica_danych_nazwy_artykulu.link_wikidane={wiki_modul.KodyKlasStronyNaDanejWiki{["strona"]=nazwa_modulu_aktualna_czy_biezaca,["nagłówek"]=true,["aktywny"]=true,},};
----
if(czy_artykul_korzystany)then
if(analiza_stron_korzystanych_zbiorczych)then
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
tekst_rozwiniety_calego_artykulu=stronicowyparser_stronasubst_modul.LiczOperacjeStronZbiorczych(self,tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
end;
end;
local strona;
if(czy_artykul_korzystany)then strona="";else strona=nazwa_modulu;end;
----
if(czy_artykul_korzystany)then
local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
stronicowyparser_szablonytekstu_modul.UstawPobierzKorzystanie(tablica_zmiennych);
tekst_rozwiniety_calego_artykulu=stronicowyparser_szablonytekstu_modul.AktualizowanieSzablonowychTekstowychKompletowaniaInformacjiTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,IterowaniePoElementachTekstu) or tekst_rozwiniety_calego_artykulu;
end;
----
local function SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
return function()
if(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane))
or((not czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)))then
----
local tablica_obiektow_strony_danych_kodow_specjalnych_modul=nil;
----
tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_danych_kodow_specjalnych_modul=szablonowe_modul:KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false);
----
local function KtorySzablonMaZwracacKategorieNaglowek(numeracja_aktualna,nazwa_szablonu)
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej");
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"powtórka nagłówek w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
end;
local function KtorySzablonMaZwracacKategorieTekst(numeracja_aktualna,nazwa_szablonu)
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej");
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"nagłowek w tekście rozdziału w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
end;
local function CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu()
return stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej");
end;
local nazwa_naglowka=stronicowyparser_obiekty_modul.nazwa_szablonu_wprowadzenia_tekstu;
local stronicowyparser_glownafunkcjazbieraniadanych_modul=require("Module:StronicowyParser/GłównaFunkcjaZbieraniaDanychStron");
local tablica_naglowka_obiekty=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_naglowka];
tablica_naglowka_obiekty.uchwyty_bez_numeracji={};
local toc=stronicowyparser_glownafunkcjazbieraniadanych_modul.SpisRzeczyWedlePodanegoTekstu(self,tekst_rozwiniety_calego_artykulu,strona, czy_artykul_korzystany,nil,tablica_naglowka_obiekty.uchwyty_bez_numeracji, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,{KtorySzablonMaZwracacKategorieNaglowek,KtorySzablonMaZwracacKategorieTekst,CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu,},nil,tabela_elementow_strony_kodow);
tablica_danych_nazwy_artykulu.TOC=toc;
return true;
end;
end;
end;
local czy_spis_function=SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
local wynik=czy_spis_function();
if(not wynik)then
tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=czy_spis_function;
end;
StronaSubstFunkcja(tablica_danych_nazwy_artykulu,tablica_ksiazki.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(czy_artykul_korzystany)then
self.tabela_listy_danych_analizy_ksiazki.link_wikidane=tablica_danych_nazwy_artykulu.link_wikidane;
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykulu=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2;
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw[nazwa_przestrzeni_ksiazki];
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki[nazwa_ksiazki];
--self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron=tablica_zmiennych;
end;
if(not czy_artykul_korzystany)then
tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=tablica_zmiennych;
if(not self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista)then self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista={};end;
table.insert(self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista,tablica_danych_nazwy_artykulu);
else
local dane_zebrane_ze_stron_lista=self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista;
if(dane_zebrane_ze_stron_lista)then
for _,tablica_danych_nazwy_artykulu in ipairs(dane_zebrane_ze_stron_lista)do
tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=nil;
tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=nil;
end;
end;
tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane=nil;
end;
return self.tabela_listy_danych_analizy_ksiazki,tablica_zmiennych,true;
end;
return p;
ciwt1ibjkfigyspxa548mcxeks0ryfl
551268
551267
2026-08-10T17:54:49Z
Persino
2851
551268
Scribunto
text/plain
local p={};
function p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,lista_dwuelementowa,kod)
if(lista_dwuelementowa)then
local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
if(not tab_obiekt)then
tabela_elementow_strony_kodow[nazwa_obiektu]={};
tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
end;
local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
if(not uchwyty_bez_numeracji)then
tab_obiekt.uchwyty_bez_numeracji={};
uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
end;
uchwyty_bez_numeracji[kod]=lista_dwuelementowa;
end;
end;
function p.WydobywanieUchwytuZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,kod)
local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
if(not tab_obiekt)then return nil;end;
local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
if(uchwyty_bez_numeracji)then
return uchwyty_bez_numeracji[kod];
end;
end;
function p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie)
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
kod_uchwytu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(kod_uchwytu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or kod_uchwytu;
local html_modul=require("Module:Html");
kod_uchwytu=html_modul.DecodeHtml(kod_uchwytu,true);
if(kod_uchwytu~="")then
KtorySzablonMaZwracacKategorie(kod_uchwytu);
local lista_dwuelementowa={};
lista_dwuelementowa[1]=kod_uchwytu;
local parametry_modul=require("Module:Parametry");
if((not tablica_zmiennych.sprawdzenie_dokonane_obiektu)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu])))then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu);
end;
tablica_zmiennych.sprawdzenie_dokonane_obiektu=true;
end;
if(tab_numer)then
tab_numer[nazwa_obiektu]=tab_numer[nazwa_obiektu]+1;
local numer=tab_numer[nazwa_obiektu];
table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],numer,lista_dwuelementowa);
else
table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa);
end;
return lista_dwuelementowa;
end;
end;
function p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie)
local kod_uchwytu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[numer_numeracji];
if(kod_uchwytu)then
local lista_dwuelementowa=p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return lista_dwuelementowa;
end;
end;
function p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then
if(nazwa_artykulu=="")then return;end;
local czy_element_wystepuje_w_tablicy=false;
local tablica_przestrzeni_wszystkiego=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron;
if(tablica_przestrzeni_wszystkiego)then
local tabela_przestrzeni_ksiazek=tablica_przestrzeni_wszystkiego[nazwa_przestrzeni];
if(tabela_przestrzeni_ksiazek)then
local tabela_ksiazek=tabela_przestrzeni_ksiazek[nazwa_przestrzeni_ksiazki]
if(tabela_ksiazek)then
local tab_ksiazki=tabela_ksiazek[nazwa_ksiazki];
if(tab_ksiazki)then
if(tab_ksiazki.spis)then
--czy_lista_niepusta=true;
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
for _,tab_value in ipairs(tab_ksiazki.spis)do
if(tab_value[2])then
for _,artykul_w_bazie_element in ipairs(tab_value[2])do
local artykul_w_bazie=artykul_w_bazie_element[1];
local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie);
artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie;
local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie);
if(artykul_bez_naglowka_w_bazie==nazwa_artykulu)then
czy_element_wystepuje_w_tablicy=true;
break;
end;
end;
end;
if(czy_element_wystepuje_w_tablicy)then break;end;
end;
end;
end;
end;
end;
end;
if(not czy_element_wystepuje_w_tablicy)then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu~=nazwa_przestrzeni_ksiazki)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu~=nazwa_ksiazki)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=nazwa_artykulu))then
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych stron",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"))then
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisu treści do korzystanych stron");
end;
end;
end;
end;
end;
function p.PusteParametryReferencji(self, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu)
local czy_ksiazka_z_tylko_odstepami_lub_pusty=(nazwa_ksiazki)and (nazwa_ksiazki=="") or nil;
local czy_artykul_z_tylko_odstepami_lub_pusty=(nazwa_artykulu)and (nazwa_artykulu=="") or nil;
local czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty=(uchwyt_obiektu)and (uchwyt_obiektu=="") or nil;
----
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
----
if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1);
end;
end;
if(czy_artykul_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2);
end;
end;
if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3);
end;
end;
end;
function p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca,bezuchwytowe)
local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[bezuchwytowe and 1 or 2];
local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[bezuchwytowe and 2 or 3];
local parametry_modul=require("Module:Parametry");
local nazwy_modul=require("Module:Nazwy");
local html_modul=require("Module:Html");
if(nazwa_artykulu)then
nazwa_artykulu=html_modul.DecodeHtml(nazwa_artykulu,true);
local techniczne_modul=require("Module:Techniczne");
nazwa_artykulu=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=nazwa_artykulu,[2]="",};
end;
local nazwa_ksiazki;local nazwa_przestrzeni_ksiazki;local nazwa_przestrzeni;
if(pelna_nazwa_ksiazki)then
pelna_nazwa_ksiazki=html_modul.DecodeHtml(pelna_nazwa_ksiazki,true);
local techniczne_modul=require("Module:Techniczne");
pelna_nazwa_ksiazki=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=pelna_nazwa_ksiazki,[2]=nazwa_modulu_aktualna_czy_biezaca,};
----
local tabela_nazw={};
local ksiazkowe_modul=require("Module:Książkowe");
pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)));
--pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
end;
return nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu;
end;
function p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst,tab_nazwy)
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu;
if(not czy_inna_wartosc_tekst)then
nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,true);
else
nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=tab_nazwy[1],tab_nazwy[2],tab_nazwy[3],tab_nazwy[4];
end;
--local ksiazkowe_modul=require("Module:Książkowe");
--pelna_nazwa_ksiazki=pelna_nazwa_ksiazki or ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"]();
--nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"]();
if((nazwa_przestrzeni)or(nazwa_przestrzeni_ksiazki)or(nazwa_ksiazki)or(nazwa_artykulu))then
local tabela_nazw={};
local ksiazkowe_modul=require("Module:Książkowe");
local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw);
local nazwa_przestrzeni_ksiazki=nazwa_przestrzeni_ksiazki or ksiazkowe_modul["NazwaPrzestrzeniKsiążki"](nil,tabela_nazw);
local nazwa_ksiazki=nazwa_ksiazki or ksiazkowe_modul["NazwaTytułuKsiążki"](nil,tabela_nazw);
local nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](nil,tabela_nazw);
if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end;
local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false);
end;
end;
function p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,czy_szablon_pudelkowy_strony_zbiorczej,KtorySzablonMaZwracacKategorie)
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not nazwa_przestrzeni)and(not nazwa_jednostki))then return;end;
local parametry_modul=require("Module:Parametry");
if((nazwa_jednostki) and (nazwa_jednostki==""))then return;end;
local szablonowe_modul=require("Module:Szablonowe");
if((nazwa_jednostki and mw.ustring.match(nazwa_jednostki,szablonowe_modul.NormaWzoruKodowaniaTekstu()))
or (nazwa_przestrzeni and mw.ustring.match(nazwa_przestrzeni,szablonowe_modul.NormaWzoruKodowaniaTekstu()))
)then return;end;
local nazwy_modul=require("Module:Nazwy");
local ksiazkowe_modul=require("Module:Książkowe");
local html_modul=require("Module:Html");
if(nazwa_jednostki)then
nazwa_jednostki=html_modul.DecodeHtml(nazwa_jednostki,true);
end;
local tabela_nazw_art={};
local nazwa_jednostki=(nazwa_jednostki
and mw.ustring.gsub(nazwa_jednostki,"^([^#]*)#(.*)$","%1")
or nil
) or ksiazkowe_modul["NazwaArtykułu"](nil,tabela_nazw_art);
if(nazwa_przestrzeni)then
nazwa_przestrzeni=html_modul.DecodeHtml(nazwa_przestrzeni,true);
end;
local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw_art);
local strona=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
local techniczne_modul=require("Module:Techniczne");
strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=self.nazwa_modulu_biezaca,};
--strona=ksiazkowe_modul["PEŁNANAZWASTRONY"](strona);
local tabela_nazw={};
local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw);
local nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw);
local nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw)));
local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazw);
if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end;
local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,nil,czy_szablon_pudelkowy_strony_zbiorczej);
end;
function p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca)
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca);
local nazwy_modul=require("Module:Nazwy");
local czy_inna_wartosc_tekst=true;
if((nazwa_artykulu)and(nazwa_ksiazki))then
--local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwy_modul["NazwaModułu"]("",nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
elseif((nazwa_artykulu)and(not nazwa_ksiazki))then
local ksiazkowe_modul=require("Module:Książkowe");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"]();
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or (ksiazkowe_modul["NazwaKsiążki"]()..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or ""));
----
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
elseif((not nazwa_artykulu)and(nazwa_ksiazki))then
local ksiazkowe_modul=require("Module:Książkowe");
local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"]();
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ksiazkowe_modul["NazwaKsiążki"]();
----
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
else
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
end;
end;
function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA_SPRAWDZANIE)
local pudelko_modul=require("Module:Pudełko");
if(((nazwa_przestrzeni)and(((nazwa_przestrzeni~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni)))or(nazwa_przestrzeni=="")))
and((nazwa_przestrzeni_ksiazki)and(((nazwa_przestrzeni_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni_ksiazki)))or(nazwa_przestrzeni_ksiazki=="")))
and((nazwa_ksiazki)and(nazwa_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_ksiazki)))
and((nazwa_artykulu)and(((nazwa_artykulu~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_artykulu)))or(nazwa_artykulu=="")))
)then
if(__FUNKCJA_SPRAWDZANIE)then
__FUNKCJA_SPRAWDZANIE(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
end;
else
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron");
end;
else
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron");
end;
end;
end;
end;
function p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz)
local linkobiekttab=tablica_zmiennych.linkobiekt[nazwa_obiektu];
local parametry_modul=require("Module:Parametry");
if((not tablica_zmiennych.sprawdzenie_dokonane_linku)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](linkobiekttab)))then
local parametry_modul=require("Module:Parametry");
local nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
local nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
local nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
local nazwa_artykulu=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu;
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
tablica_zmiennych.sprawdzenie_dokonane_linku=true;
end;
table.insert(linkobiekttab,uchwyt_obiektu);
if(czy_pobierz)then
if(not tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane)then
tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane={};
end;
table.insert(tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane,{{nazwa_obiektu,uchwyt_obiektu,},{obiekt,kod,},});
end;
end;
function p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz)
p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,function()
local parametry_modul=require("Module:Parametry");
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu))then
local tablica_zmiennych2={};
tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2={}
local tabela_listy_danych_analizy_ksiazki0,tablica_zmiennych2,czy_inna=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2);
if(tabela_listy_danych_analizy_ksiazki0)then
if((not czy_inna)or(not tablica_zmiennych2))then return;end;
local stronicowyparser_szablony_tekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
local JuzPoliczone=function()
if(czy_pobierz)then
stronicowyparser_szablony_tekstu_modul.UstawianiePobierz(tablica_zmiennych,tablica_zmiennych2,obiekt,kod,nazwa_obiektu,uchwyt_obiektu,false);
end;
if(not tablica_zmiennych2.dane_juz_policzone)then tablica_zmiennych2.dane_juz_policzone={};end;
local tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu];
if(not tab_nazwa_obiektu)then
tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]={};
tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu];
end;
local tab_uchwyt=tab_nazwa_obiektu[uchwyt_obiektu];
if(tab_uchwyt)then
return true;
end;
tab_nazwa_obiektu[uchwyt_obiektu]=true;
return false;
end;
if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then
local czy_policzone=JuzPoliczone();
if(czy_policzone)then
return;
end;
else
JuzPoliczone();
end;
stronicowyparser_szablony_tekstu_modul.DodawanieDoBazySzablonuTekstuStronyKorzystanejElementyInnejStrony(tablica_zmiennych,tablica_zmiennych2);
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
local czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2=tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu];
local CzyLink=czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2.CzyLink;
local ile_razy=0;
if(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2)then
for _, parametry_obiektu in ipairs(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2) do
if(parametry_obiektu[1]==uchwyt_obiektu)then
ile_razy=ile_razy+1;
if(ile_razy>1)then break;end;
end;
end;
end
if(ile_razy~=1)then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu);
end;
p.PusteParametryReferencji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
else
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera");
end;
end;
else
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
end);
end;
function p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,czy_pobierz)
local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1];
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca);
----
local parametry_modul=require("Module:Parametry");
if(parametry_modul.CzyTak(uchwyt_obiektu))then
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
uchwyt_obiektu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(uchwyt_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or uchwyt_obiektu;
local html_modul=require("Module:Html");
uchwyt_obiektu=html_modul.DecodeHtml(uchwyt_obiektu,true);
end;
----
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
----
if(parametry_modul.CzyTak(uchwyt_obiektu))then
nazwa_artykulu=(nazwa_artykulu or (nazwa_ksiazki and "" or nil));
if(nazwa_artykulu)then
if(nazwa_artykulu~="")then
if(not nazwa_ksiazki)then
nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
elseif(nazwa_ksiazki=="")then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
return;
end;
elseif((nazwa_ksiazki)and(nazwa_ksiazki~=""))then
nazwa_artykulu="";
elseif((nazwa_ksiazki)and(nazwa_ksiazki==""))then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
return;
else
nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
end;
if((nazwa_przestrzeni~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)
or(nazwa_przestrzeni_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)
or(nazwa_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)
or(nazwa_artykulu~=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then
p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz);
else
p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz);
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
else
p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz)
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then
p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,nil);
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu))then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu);
end;
KtorySzablonMaZwracacKategorie(uchwyt_obiektu);
end;
function p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, czy_artykul_korzystany,tablica_zmiennych,czy_szablon_pudelkowy_strony_zbiorczej)
local function __FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni])then self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]={};end;
local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
if(not tablica_przestrzeni[nazwa_przestrzeni_ksiazki])then tablica_przestrzeni[nazwa_przestrzeni_ksiazki]={};end;
local tablica_przestrzeni_ksiazki=tablica_przestrzeni[nazwa_przestrzeni_ksiazki];
if(not tablica_przestrzeni_ksiazki[nazwa_ksiazki])then tablica_przestrzeni_ksiazki[nazwa_ksiazki]={};end;
local tablica_ksiazki=tablica_przestrzeni_ksiazki[nazwa_ksiazki];
if(not tablica_ksiazki.lista_podstron_woluminu)then tablica_ksiazki.lista_podstron_woluminu={};end;
if(nazwa_artykulu)then
if(not tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu])then tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]={};end;
local artykul_analizowany=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu];
return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany;
else
return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki;
end;
end;
local function __FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if(not czy_artykul_korzystany)then
if(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu)then
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then
return 0,nil,nil,nil,nil,nil,self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron,false;
else
if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=true;
end;
end;
else
return nil;
end;
end;
if(self.tabela_listy_danych_analizy_ksiazki)then
if(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron)then
local tabela_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
if(tabela_przestrzeni)then
local tabela_przestrzeni_ksiazki=tabela_przestrzeni[nazwa_przestrzeni_ksiazki];
if(tabela_przestrzeni_ksiazki)then
local tabela_ksiazka=tabela_przestrzeni_ksiazki[nazwa_ksiazki];
if(tabela_ksiazka)then
local lista_artykolow=tabela_ksiazka.lista_podstron_woluminu;
if(lista_artykolow)then
local tabela_artykul=lista_artykolow[nazwa_artykulu];
if(tabela_artykul)then
local dane_zebrane_ze_stron=tabela_artykul.dane_zebrane_ze_stron;
----
if(tabela_artykul.TOCSPIS_FUNCTION)then
local wynik=tabela_artykul.TOCSPIS_FUNCTION();
if(wynik)then
tabela_artykul.TOCSPIS_FUNCTION=nil;
end;
end;
return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,true;
end;
end;
end;
end;
end;
else
return nil;
end;
else
return nil;
end;
return true;
end;
local nazwy_modul=require("Module:Nazwy");
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,czy_inna=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local function StronaSubstFunkcja(tabela_artykul,spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if((czy_szablon_pudelkowy_strony_zbiorczej)and(not czy_artykul_korzystany)and(tabela_artykul)and(not tabela_artykul.strona_zbiorcza))then
--local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
local TakFun=function(frame) return "tak";end;local NieFun=function(frame) return "";end;
tabela_artykul.strona_zbiorcza=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
end;
if(not wartosc_wyniku)then
return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna;
end;
----
local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((nazwa_przestrzeni~=nazwy_np_modul.Main)
and(nazwa_przestrzeni~=nazwy_np_modul.Wikijunior)
and((nazwa_przestrzeni~=nazwy_np_modul.User)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$")))
and((nazwa_przestrzeni~=nazwy_np_modul.Wikibooks)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$")))
)then
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
----
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local parametry_modul=require("Module:Parametry");
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
----
local tekst_rozwiniety_calego_artykulu_ref=nil;
local tablica_analizy_obiektow_strony_dany_modul_ref=nil;
local tablica_danych_parametrow_szablonu_strony_ref=nil;
----
local function InneInformacjePrzebneDoAnalizowanejKsiazki()
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"])then self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"]="tak";end;
end;
local czy_ksiazka_istnieje_w_tablicy=((tablica_ksiazki)and(tablica_ksiazki.czy_spis_analizowano))and true or false;
if(not czy_ksiazka_istnieje_w_tablicy)then
tablica_ksiazki.czy_spis_analizowano=true;
local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści");
local nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp;
local tabela_artykulow,tabela_licencji_spisu_tresci,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci=stronicowyparser_spistresci_modul.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,function(nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona)
local tablica_przestrzeni_strona=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni_strona];
if(tablica_przestrzeni_strona)then
local tablica_przestrzeni_ksiazki_strona=tablica_przestrzeni_strona[nazwa_przestrzeni_ksiazki_strona];
if(tablica_przestrzeni_ksiazki_strona)then
local tablica_ksiazki_strona=tablica_przestrzeni_ksiazki_strona[nazwa_ksiazki_strona];
if(tablica_ksiazki_strona)then
if(tablica_ksiazki_strona.spis)then
nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp=nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona;
tablica_ksiazki.spis=tablica_ksiazki_strona.spis;
tablica_ksiazki.licencja=tablica_ksiazki_strona.licencja;
tablica_ksiazki.nazwa_bazowego_spisu=tablica_ksiazki_strona.nazwa_bazowego_spisu;
tablica_ksiazki.tab_inne_spisy=tablica_ksiazki_strona.tab_inne_spisy;
tablica_ksiazki.dodatkowe_strony_woluminu=tablica_ksiazki_strona.dodatkowe_strony_woluminu;
tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=tablica_ksiazki_strona.adres_woluminu_bazowego_spisu_rzeczy;
tablica_ksiazki.referencja_do_nowej_formy_spisu={tablica_przestrzeni_strona,tablica_przestrzeni_ksiazki_strona,tablica_ksiazki_strona,};
return 1;
end;
end;
end
end;
end,function(tekst_rozwiniety_calego_artykulu_ref_spis,nazwa_przestrzeni_ref_spis,nazwa_przestrzeni_ksiazki_ref_spis,nazwa_ksiazki_ref_spis,nazwa_artykulu_ref_spis,tablica_analizy_obiektow_strony_dany_modul_ref_spis,tablica_danych_parametrow_szablonu_strony_ref_spis)
----
if((nazwa_przestrzeni==nazwa_przestrzeni_ref_spis)and(nazwa_przestrzeni_ksiazki==nazwa_przestrzeni_ksiazki_ref_spis)and(nazwa_ksiazki==nazwa_ksiazki_ref_spis)and(nazwa_artykulu==nazwa_artykulu_ref_spis))then
tekst_rozwiniety_calego_artykulu_ref=tekst_rozwiniety_calego_artykulu_ref_spis;
local parametry_modul=require("Module:Parametry");
tablica_analizy_obiektow_strony_dany_modul_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_analizy_obiektow_strony_dany_modul_ref_spis);
tablica_danych_parametrow_szablonu_strony_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_danych_parametrow_szablonu_strony_ref_spis);
end;
----
end);
local function __FUNKCJA_SPISU(tablica_ksiazki,czy_podac_adres)
tablica_ksiazki.spis=tabela_artykulow;
if(czy_artykul_korzystany)then
tablica_ksiazki.licencja=tabela_licencji_spisu_tresci;
end;
tablica_ksiazki.nazwa_bazowego_spisu=nazwa_glownego_spisu;
tablica_ksiazki.tab_inne_spisy=tab_inne_spisy;
tablica_ksiazki.dodatkowe_strony_woluminu=dodatkowe_artykuly;
tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=czy_podac_adres and adres_ksiazki_glownego_spisu_tresci or nil;
end;
if(tabela_artykulow==0)then
if(czy_artykul_korzystany)then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"korzystana strona główna nie istnieje");
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"dołączone strony główne nie istnieją",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
elseif(tabela_artykulow)then
if(parametry_modul.TypeTable(tabela_artykulow))then
if(adres_ksiazki_glownego_spisu_tresci)then
__FUNKCJA_SPISU(tablica_ksiazki,true);
local tablica_ksiazki_stara=tablica_ksiazki;
local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true);
local nazwa_przestrzeni=adres_ksiazki_glownego_spisu_tresci[1];
local nazwa_przestrzeni_ksiazki=adres_ksiazki_glownego_spisu_tresci[2];
local nazwa_ksiazki=adres_ksiazki_glownego_spisu_tresci[3];
if((kod_wyniku==1)or(kod_wyniku==2))then
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
if(not wartosc_wyniku)then
return wartosc_wyniku,true;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
local nazwa_artykulu=artykul;
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,true;
end;
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni ,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,};
__FUNKCJA_SPISU(tablica_ksiazki,false);
return nil,nil,artykul,kod_wyniku;
elseif((kod_wyniku==3)or(kod_wyniku==4))then
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,};
__FUNKCJA_SPISU(tablica_ksiazki,false);
return nil,nil,artykul,kod_wyniku;
end;
else
__FUNKCJA_SPISU(tablica_ksiazki,false);
end;
elseif(tabela_artykulow~=1)then
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(not wartosc_wyniku)then
return wartosc_wyniku,true;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,true;
end;
end;
else
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"))then
if(((self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=="")and(nazwa_artykulu~=""))or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=""))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych książek na ich stronach głównych",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
end;
end;
end;
end;
end;
----
local wartosc_wyniku,wynik_bledu,artykul_bazowy,kod_wyniku_bazowy=InneInformacjePrzebneDoAnalizowanejKsiazki();
if(wynik_bledu)then return wartosc_wyniku;end;
local kod_wyniku_przekierowan=kod_wyniku_bazowy;
----
--if((not tablica_przestrzeni)or(not tablica_przestrzeni_ksiazki)or(not tablica_ksiazki)or(not artykul_analizowany))then
-- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
--end;
----
if((tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy)and(kod_wyniku_bazowy))--[[and((kod_wyniku_bazowy==1)or(kod_wyniku_bazowy==2))]]then
----
nazwa_przestrzeni=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[1];
nazwa_przestrzeni_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[2];
nazwa_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[3];
nazwa_artykulu=artykul_bazowy;
----
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=tablica_ksiazki.referencja_do_nowej_formy_spisu[1],tablica_ksiazki.referencja_do_nowej_formy_spisu[2],tablica_ksiazki.referencja_do_nowej_formy_spisu[3];
end;
local tabela_artykulow=tablica_ksiazki.spis;
if(tabela_artykulow)then
local nazwa_glownego_spisu=tablica_ksiazki.nazwa_bazowego_spisu;
local tab_inne_spisy=tablica_ksiazki.tab_inne_spisy;
local dodatkowe_artykuly=tablica_ksiazki.dodatkowe_strony_woluminu
local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,false);
if(kod_wyniku)then
nazwa_artykulu=artykul;
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
kod_wyniku_przekierowan=kod_wyniku_przekierowan or kod_wyniku;
end;
local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local PrzekierownieAwaryjne=function()
if(not kod_wyniku_przekierowan)then
--local artykul2,kod_wyniku2=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true);
local techniczne_modul=require("Module:Techniczne");
local strona=techniczne_modul.PrzekierowanieDoStrony(nazwa_modulu);
if(strona)then
if(strona~=nazwa_modulu)then
----
local tabela_nazw={};
nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw);
nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw);
nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw) or nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw));
nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazwa);
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(not wartosc_wyniku)then
return wartosc_wyniku;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku;
end;
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
nazwa_modulu=strona;
else
return 0;
end;
end;
end;
end;
local wynik=PrzekierownieAwaryjne();
if(czy_artykul_korzystany)then
self.nazwa_modulu_biezaca=nazwa_modulu;
end;
if(wynik)then return wynik;end;
----
if(czy_artykul_korzystany)then
if((not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then
self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni;
self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu=nazwa_przestrzeni_ksiazki;
self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu=nazwa_ksiazki;
self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=nazwa_artykulu;
end;
end;
local nazwa_modulu_aktualna_czy_biezaca=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu) or nazwa_modulu;
-- przydzielanie tablicy
if(czy_artykul_korzystany)then
artykul_analizowany.artykul_biezacy=true;
tablica_ksiazki.ksiazka_analizowana=true;
end;
--koniec
--local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}");
if(not tablica_zmiennych)then tablica_zmiennych={};end;
if(not tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2)then tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={};end;
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
for _,element_w_tablicy_obiekt in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do
local CzyLink=element_w_tablicy_obiekt.CzyLink;
local CzyNum=element_w_tablicy_obiekt.CzyNum;
local wartosc=element_w_tablicy_obiekt[1];
tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum,};
if(czy_artykul_korzystany)then tablica_zmiennych.linkobiekt[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum;};end;
end;
local function StronaZbiorcza()
if(czy_artykul_korzystany)then
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end;
local wynik=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,tablica_ksiazki.spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
artykul_analizowany.strona_zbiorcza=(wynik and "tak" or "");
return wynik;
end;
return nil;
end;
local strona_zbiorcza=StronaZbiorcza();
local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
----
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony;
if((not tekst_rozwiniety_calego_artykulu_ref)or(not tablica_analizy_obiektow_strony_dany_modul_ref)or(not tablica_danych_parametrow_szablonu_strony_ref))then
tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))and true or nil),
nil)
else
tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=tekst_rozwiniety_calego_artykulu_ref,tablica_analizy_obiektow_strony_dany_modul_ref,tablica_danych_parametrow_szablonu_strony_ref;
end;
----
if(not czy_artykul_korzystany)then
if(not tekst_rozwiniety_calego_artykulu)then return 0;end;
end;
if(czy_artykul_korzystany)then
if(not tekst_rozwiniety_calego_artykulu)then
if(strona_zbiorcza)then
self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak";
end;
return nil;
end;
end;
local szablonowe_modul=require("Module:Szablonowe");
local parametry_modul=require("Module:Parametry");
if((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))then
local aktualna_nazwa_modulu=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwa_modulu_aktualna_czy_biezaca or nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu);
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(self,aktualna_nazwa_modulu);
if(tekst)then
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,aktualna_nazwa_modulu);
local tablica_danych_parametrow_szablonu_strony={};
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,aktualna_nazwa_modulu,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
if(stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
return true;
elseif(stronicowyparser_obiekty_modul.strona_start[nazwa_szablonu])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or "";
local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC";
if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return true;
end;
end);
if(wynik)then break;end;
end;
end;
end;
end;
local uzyskano_w_wyniku_parsowania_wywolanie_szablonu;
local analiza_stron_korzystanych_zbiorczych=nil;
local stronastart=nil;
----
local tablica_obiekty=stronicowyparser_obiekty_modul.obiekty;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty;
local format_elementowy_referencji_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_referencji_obiektowy;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu;
local szablony_wykorzystywane_przez_strony_zbiorcze=stronicowyparser_obiekty_modul.szablony_wykorzystywane_przez_strony_zbiorcze;
local format_elementowy_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_obiektowy;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu;
----
local strona_start=stronicowyparser_obiekty_modul.strona_start;
local strona_start_ze_spisem_rzeczy_strony=stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony;
local strona_start_inne=stronicowyparser_obiekty_modul.strona_start_inne;
local szablony_strony_zbiorczej=stronicowyparser_obiekty_modul.strona_zbiorcza;
----
local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe;
local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe;
local tab_szablony_stronicowe_formatowania_tekstu=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu;
local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego;
----
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
local tabela_elementow_strony_kodow={};
-- for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do
local function AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer)
if(czy_artykul_korzystany)then
if(tabela_parametrow_szablonu)then
if((not stronastart)and(self.tabela_listy_danych_analizy_ksiazki.formatowanie==nil))then
if(strona_start[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
stronastart=true;
local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or "";
local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC";
if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return;
elseif(strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
stronastart=true;
return;
elseif(strona_start_inne[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
stronastart=true;
return;
elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
analiza_stron_korzystanych_zbiorczych=true;
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not parametry_modul.CzyTak(nazwa_prestreni_nazw))and(not parametry_modul.CzyTak(nazwa_jednostki)))then
return;
end;
end;
elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
analiza_stron_korzystanych_zbiorczych=true;
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not parametry_modul.CzyTak(nazwa_przestrzeni))and(not parametry_modul.CzyTak(nazwa_jednostki)))then
return;
end;
end;
end;
end;
local plik=mw.ustring.match(nazwa_szablonu_wywolania,"^:");
if(plik==nil)then
if(tabela_parametrow_szablonu)then
if(not parametry_modul.CzyTak(tabela_parametrow_szablonu["bez automatu"]))then
local czy_wypowiedzenie=(nazwa_szablonu_wywolania=="Wypowiedzenie");
local czy_linkobiekt;
local czy_link;local czy_pobierz;
local czy_wypowiedzenie_z_parametrami;
local czy_linkobiekt_z_parametrami;
if(czy_wypowiedzenie)then
czy_linkobiekt=false;
czy_link=false;
czy_pobierz=false;
czy_wypowiedzenie_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["rodzaj"]);
else
czy_linkobiekt=(nazwa_szablonu_wywolania=="LinkObiekt");
if(czy_linkobiekt)then
czy_link=true;
czy_pobierz=false;
czy_linkobiekt_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["typ"]);
else
czy_link=mw.ustring.match(nazwa_szablonu_wywolania,"^Link");
czy_pobierz=(not czy_link) and mw.ustring.match(nazwa_szablonu_wywolania,"^Pobierz") or nil;
end;
end;
if((not czy_link)and(not czy_pobierz))then
local wartosc_elementu;local numer_uchwytu;
if(not czy_wypowiedzenie_z_parametrami) then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania];
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
else
local rodzaj=tabela_parametrow_szablonu["rodzaj"];
if(rodzaj)then
wartosc_elementu=format_elementowy_obiektowy[rodzaj] and rodzaj or nil;
if(wartosc_elementu)then
numer_uchwytu=tablica_obiekty[5];
end;
end;
end;
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
end;
elseif(czy_artykul_korzystany)then
if(czy_link)then
local wartosc_elementu;
if(not czy_linkobiekt_z_parametrami)then
wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania];
else
local typ=tabela_parametrow_szablonu["typ"];
if(typ)then
typ=format_elementowy_referencji_obiektowy[typ] and typ or nil;
if(typ)then
wartosc_elementu=mw.getContentLanguage():ucfirst(typ);
end;
end;
end;
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Link"..wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
else
local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu[nazwa_szablonu_wywolania];
if(wartosc_elementu)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
else
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
end;
return;
end;
end;
elseif(czy_pobierz)then
local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania];
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,true);
return;
end;
end;
end;
if(czy_wypowiedzenie)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Obiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artykul_korzystany,tablica_obiekty[5],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu[nazwa_szablonu_wywolania])then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka[nazwa_szablonu_wywolania];
local wartosc_elementu;local numer_uchwytu;
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,wartosc_elementu,lista_dwuelementowa,kod);
if(czy_artykul_korzystany)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return;
elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_tekstu[nazwa_szablonu_wywolania])then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania];
local wartosc_elementu;local numer_uchwytu;
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
if(lista_dwuelementowa)then
local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
local tekst=stronicowyparser_szablonytekstu_modul.ParametrTekstowySzablonuTekstu(tabela_parametrow_szablonu);
local bez_preprocess=stronicowyparser_szablonytekstu_modul.SzablonTekstuBezPreProcess(tabela_parametrow_szablonu);
local czy_bez_preprocess=parametry_modul.CzyTak(bez_preprocess);
if(tekst)then
local czy_szablon_wszystko=false;
tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul,
function(szablon,obiekt,kod)
if(czy_bez_preprocess)then return nil;end;
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
if(
(tab_szablony[nazwa_szablonu])
or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu])
or(tab_szablony_stronicowe_formatowania_tekstu[nazwa_szablonu])
or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu])
)then
if(not czy_artykul_korzystany)then
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=tabela_parametrow_szablonu["nazwa jednostki"] or (((nazwa_przestrzeni_ksiazki~="") and (nazwa_przestrzeni_ksiazki.."/") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or ""))
if(self)then
local czy_link_lub_pobierz=mw.ustring.match(nazwa_szablonu,"^Link") or mw.ustring.match(nazwa_szablonu,"^Pobierz");
if(czy_link_lub_pobierz)then
p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca);
else
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu);
end;
end;
end;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end;
return nil;
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- instrukcje warunkowe;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- wywołania ramek Lua w Scribunto
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- tagi szablonowe;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end);
czy_szablon_wszystko=czy_szablon_wszystko or true;
if(wynik)then return wynik;end;
elseif(obiekt=="ZMIENNA")then
czy_szablon_wszystko=czy_szablon_wszystko or true;
local zawartosc=mw.ustring.match(szablon,"^{{{(.*)}}}$");
if(zawartosc)then
zawartosc=mw.ustring.gsub(zawartosc,"|","{{!}}");
return "{{(((}}"..zawartosc.."{{)))}}";
end;
end;
end);
if((czy_szablon_wszystko)and(not bez_preprocess))then
local frame=mw.getCurrentFrame();
tekst=frame:preprocess(tekst);
end;
lista_dwuelementowa[2]=tekst;
end;
--local __metatabelka=getmetatable(tabela_parametrow_szablonu);
--if(__metatabelka)then setmetatable(tabela_parametrow_szablonu,nil);end;
stronicowyparser_szablonytekstu_modul.DodawanieDoBazyStronySzablonuTekstu(tablica_zmiennych,wartosc_elementu,lista_dwuelementowa,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,czy_artykul_korzystany);
end;
return;
elseif(czy_artykul_korzystany)then
if(czy_linkobiekt)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="LinkObiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,"Obiekt",nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
else
if(stronicowyparser_obiekty_modul.szablony_z_lokalnym_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
return;
elseif(stronicowyparser_obiekty_modul.bez_uchwytow_spis_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
local nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2] or "";
local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1] or "";
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "")
end;
end;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie);
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
else
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
end;
return;
else
local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
local nazwy_modul=require("Module:Nazwy");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or "";
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or "";
local nazwa_symulacyjnej_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
local uchwyt=nazwa_szablonu_wywolania..":"..nazwa_symulacyjnej_strony;
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=uchwyt;
end;
end;
if((stronicowyparser_obiekty_modul.szablony_kontenerowe[nazwa_szablonu_wywolania])
or(szablony_strony_zbiorczej[nazwa_szablonu_wywolania])
)then
if(szablony_wykorzystywane_przez_strony_zbiorcze[nazwa_szablonu_wywolania])then
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie);
else
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,nil,KtorySzablonMaZwracacKategorie);
end;
return;
elseif((strona_zbiorcza)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie);
return;
end;
end;
end;
end;
end;
end;
end;
end;
----
local function GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer)
stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego);
end;
local function IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu,tab_numer)
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul);
for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do
GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer);
end;
end;
IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu);
----
local tablica_danych_nazwy_artykulu=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu] or {};
tablica_danych_nazwy_artykulu.uchwyty_i_numeracje=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2;
----
local wiki_modul=require("Module:Wiki");
tablica_danych_nazwy_artykulu.link_wikidane={wiki_modul.KodyKlasStronyNaDanejWiki{["strona"]=nazwa_modulu_aktualna_czy_biezaca,["nagłówek"]=true,["aktywny"]=true,},};
----
if(czy_artykul_korzystany)then
if(analiza_stron_korzystanych_zbiorczych)then
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
tekst_rozwiniety_calego_artykulu=stronicowyparser_stronasubst_modul.LiczOperacjeStronZbiorczych(self,tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
end;
end;
local strona;
if(czy_artykul_korzystany)then strona="";else strona=nazwa_modulu;end;
----
if(czy_artykul_korzystany)then
local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
stronicowyparser_szablonytekstu_modul.UstawPobierzKorzystanie(tablica_zmiennych);
tekst_rozwiniety_calego_artykulu=stronicowyparser_szablonytekstu_modul.AktualizowanieSzablonowychTekstowychKompletowaniaInformacjiTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,IterowaniePoElementachTekstu) or tekst_rozwiniety_calego_artykulu;
end;
----
local function SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
return function()
if(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane))
or((not czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)))then
----
local tablica_obiektow_strony_danych_kodow_specjalnych_modul=nil;
----
tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_danych_kodow_specjalnych_modul=szablonowe_modul:KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false);
----
local function KtorySzablonMaZwracacKategorieNaglowek(numeracja_aktualna,nazwa_szablonu)
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej");
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"powtórka nagłówek w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
end;
local function KtorySzablonMaZwracacKategorieTekst(numeracja_aktualna,nazwa_szablonu)
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej");
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"nagłowek w tekście rozdziału w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
end;
local function CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu()
return stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej");
end;
local nazwa_naglowka=stronicowyparser_obiekty_modul.nazwa_szablonu_wprowadzenia_tekstu;
local stronicowyparser_glownafunkcjazbieraniadanych_modul=require("Module:StronicowyParser/GłównaFunkcjaZbieraniaDanychStron");
local tablica_naglowka_obiekty=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_naglowka];
tablica_naglowka_obiekty.uchwyty_bez_numeracji={};
local toc=stronicowyparser_glownafunkcjazbieraniadanych_modul.SpisRzeczyWedlePodanegoTekstu(self,tekst_rozwiniety_calego_artykulu,strona, czy_artykul_korzystany,nil,tablica_naglowka_obiekty.uchwyty_bez_numeracji, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,{KtorySzablonMaZwracacKategorieNaglowek,KtorySzablonMaZwracacKategorieTekst,CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu,},nil,tabela_elementow_strony_kodow);
tablica_danych_nazwy_artykulu.TOC=toc;
return true;
end;
end;
end;
local czy_spis_function=SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
local wynik=czy_spis_function();
if(not czy_artykul_korzystany)then
if(not wynik)then
tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=czy_spis_function;
end;
end;
StronaSubstFunkcja(tablica_danych_nazwy_artykulu,tablica_ksiazki.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(czy_artykul_korzystany)then
self.tabela_listy_danych_analizy_ksiazki.link_wikidane=tablica_danych_nazwy_artykulu.link_wikidane;
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykulu=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2;
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw[nazwa_przestrzeni_ksiazki];
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki[nazwa_ksiazki];
--self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron=tablica_zmiennych;
end;
if(not czy_artykul_korzystany)then
tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=tablica_zmiennych;
if(not self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista)then self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista={};end;
table.insert(self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista,tablica_danych_nazwy_artykulu);
else
local dane_zebrane_ze_stron_lista=self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista;
if(dane_zebrane_ze_stron_lista)then
for _,tablica_danych_nazwy_artykulu in ipairs(dane_zebrane_ze_stron_lista)do
tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=nil;
tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=nil;
end;
end;
tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane=nil;
end;
return self.tabela_listy_danych_analizy_ksiazki,tablica_zmiennych,true;
end;
return p;
r72rarxblwcqmb9tcr48q476blvtk1y
551273
551268
2026-08-10T18:46:40Z
Persino
2851
551273
Scribunto
text/plain
local p={};
function p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,lista_dwuelementowa,kod)
if(lista_dwuelementowa)then
local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
if(not tab_obiekt)then
tabela_elementow_strony_kodow[nazwa_obiektu]={};
tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
end;
local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
if(not uchwyty_bez_numeracji)then
tab_obiekt.uchwyty_bez_numeracji={};
uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
end;
uchwyty_bez_numeracji[kod]=lista_dwuelementowa;
end;
end;
function p.WydobywanieUchwytuZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,kod)
local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
if(not tab_obiekt)then return nil;end;
local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
if(uchwyty_bez_numeracji)then
return uchwyty_bez_numeracji[kod];
end;
end;
function p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie)
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
kod_uchwytu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(kod_uchwytu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or kod_uchwytu;
local html_modul=require("Module:Html");
kod_uchwytu=html_modul.DecodeHtml(kod_uchwytu,true);
if(kod_uchwytu~="")then
KtorySzablonMaZwracacKategorie(kod_uchwytu);
local lista_dwuelementowa={};
lista_dwuelementowa[1]=kod_uchwytu;
local parametry_modul=require("Module:Parametry");
if((not tablica_zmiennych.sprawdzenie_dokonane_obiektu)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu])))then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu);
end;
tablica_zmiennych.sprawdzenie_dokonane_obiektu=true;
end;
if(tab_numer)then
tab_numer[nazwa_obiektu]=tab_numer[nazwa_obiektu]+1;
local numer=tab_numer[nazwa_obiektu];
table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],numer,lista_dwuelementowa);
else
table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa);
end;
return lista_dwuelementowa;
end;
end;
function p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie)
local kod_uchwytu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[numer_numeracji];
if(kod_uchwytu)then
local lista_dwuelementowa=p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return lista_dwuelementowa;
end;
end;
function p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then
if(nazwa_artykulu=="")then return;end;
local czy_element_wystepuje_w_tablicy=false;
local tablica_przestrzeni_wszystkiego=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron;
if(tablica_przestrzeni_wszystkiego)then
local tabela_przestrzeni_ksiazek=tablica_przestrzeni_wszystkiego[nazwa_przestrzeni];
if(tabela_przestrzeni_ksiazek)then
local tabela_ksiazek=tabela_przestrzeni_ksiazek[nazwa_przestrzeni_ksiazki]
if(tabela_ksiazek)then
local tab_ksiazki=tabela_ksiazek[nazwa_ksiazki];
if(tab_ksiazki)then
if(tab_ksiazki.spis)then
--czy_lista_niepusta=true;
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
for _,tab_value in ipairs(tab_ksiazki.spis)do
if(tab_value[2])then
for _,artykul_w_bazie_element in ipairs(tab_value[2])do
local artykul_w_bazie=artykul_w_bazie_element[1];
local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie);
artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie;
local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie);
if(artykul_bez_naglowka_w_bazie==nazwa_artykulu)then
czy_element_wystepuje_w_tablicy=true;
break;
end;
end;
end;
if(czy_element_wystepuje_w_tablicy)then break;end;
end;
end;
end;
end;
end;
end;
if(not czy_element_wystepuje_w_tablicy)then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu~=nazwa_przestrzeni_ksiazki)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu~=nazwa_ksiazki)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=nazwa_artykulu))then
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych stron",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"))then
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisu treści do korzystanych stron");
end;
end;
end;
end;
end;
function p.PusteParametryReferencji(self, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu)
local czy_ksiazka_z_tylko_odstepami_lub_pusty=(nazwa_ksiazki)and (nazwa_ksiazki=="") or nil;
local czy_artykul_z_tylko_odstepami_lub_pusty=(nazwa_artykulu)and (nazwa_artykulu=="") or nil;
local czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty=(uchwyt_obiektu)and (uchwyt_obiektu=="") or nil;
----
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
----
if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1);
end;
end;
if(czy_artykul_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2);
end;
end;
if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3);
end;
end;
end;
function p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca,bezuchwytowe)
local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[bezuchwytowe and 1 or 2];
local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[bezuchwytowe and 2 or 3];
local parametry_modul=require("Module:Parametry");
local nazwy_modul=require("Module:Nazwy");
local html_modul=require("Module:Html");
if(nazwa_artykulu)then
nazwa_artykulu=html_modul.DecodeHtml(nazwa_artykulu,true);
local techniczne_modul=require("Module:Techniczne");
nazwa_artykulu=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=nazwa_artykulu,[2]="",};
end;
local nazwa_ksiazki;local nazwa_przestrzeni_ksiazki;local nazwa_przestrzeni;
if(pelna_nazwa_ksiazki)then
pelna_nazwa_ksiazki=html_modul.DecodeHtml(pelna_nazwa_ksiazki,true);
local techniczne_modul=require("Module:Techniczne");
pelna_nazwa_ksiazki=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=pelna_nazwa_ksiazki,[2]=nazwa_modulu_aktualna_czy_biezaca,};
----
local tabela_nazw={};
local ksiazkowe_modul=require("Module:Książkowe");
pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)));
--pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
end;
return nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu;
end;
function p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst,tab_nazwy)
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu;
if(not czy_inna_wartosc_tekst)then
nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,true);
else
nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=tab_nazwy[1],tab_nazwy[2],tab_nazwy[3],tab_nazwy[4];
end;
--local ksiazkowe_modul=require("Module:Książkowe");
--pelna_nazwa_ksiazki=pelna_nazwa_ksiazki or ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"]();
--nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"]();
if((nazwa_przestrzeni)or(nazwa_przestrzeni_ksiazki)or(nazwa_ksiazki)or(nazwa_artykulu))then
local tabela_nazw={};
local ksiazkowe_modul=require("Module:Książkowe");
local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw);
local nazwa_przestrzeni_ksiazki=nazwa_przestrzeni_ksiazki or ksiazkowe_modul["NazwaPrzestrzeniKsiążki"](nil,tabela_nazw);
local nazwa_ksiazki=nazwa_ksiazki or ksiazkowe_modul["NazwaTytułuKsiążki"](nil,tabela_nazw);
local nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](nil,tabela_nazw);
if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end;
local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false);
end;
end;
function p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,czy_szablon_pudelkowy_strony_zbiorczej,KtorySzablonMaZwracacKategorie)
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not nazwa_przestrzeni)and(not nazwa_jednostki))then return;end;
local parametry_modul=require("Module:Parametry");
if((nazwa_jednostki) and (nazwa_jednostki==""))then return;end;
local szablonowe_modul=require("Module:Szablonowe");
if((nazwa_jednostki and mw.ustring.match(nazwa_jednostki,szablonowe_modul.NormaWzoruKodowaniaTekstu()))
or (nazwa_przestrzeni and mw.ustring.match(nazwa_przestrzeni,szablonowe_modul.NormaWzoruKodowaniaTekstu()))
)then return;end;
local nazwy_modul=require("Module:Nazwy");
local ksiazkowe_modul=require("Module:Książkowe");
local html_modul=require("Module:Html");
if(nazwa_jednostki)then
nazwa_jednostki=html_modul.DecodeHtml(nazwa_jednostki,true);
end;
local tabela_nazw_art={};
local nazwa_jednostki=(nazwa_jednostki
and mw.ustring.gsub(nazwa_jednostki,"^([^#]*)#(.*)$","%1")
or nil
) or ksiazkowe_modul["NazwaArtykułu"](nil,tabela_nazw_art);
if(nazwa_przestrzeni)then
nazwa_przestrzeni=html_modul.DecodeHtml(nazwa_przestrzeni,true);
end;
local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw_art);
local strona=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
local techniczne_modul=require("Module:Techniczne");
strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=self.nazwa_modulu_biezaca,};
--strona=ksiazkowe_modul["PEŁNANAZWASTRONY"](strona);
local tabela_nazw={};
local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw);
local nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw);
local nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw)));
local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazw);
if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end;
local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,nil,czy_szablon_pudelkowy_strony_zbiorczej);
end;
function p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca)
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca);
local nazwy_modul=require("Module:Nazwy");
local czy_inna_wartosc_tekst=true;
if((nazwa_artykulu)and(nazwa_ksiazki))then
--local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwy_modul["NazwaModułu"]("",nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
elseif((nazwa_artykulu)and(not nazwa_ksiazki))then
local ksiazkowe_modul=require("Module:Książkowe");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"]();
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or (ksiazkowe_modul["NazwaKsiążki"]()..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or ""));
----
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
elseif((not nazwa_artykulu)and(nazwa_ksiazki))then
local ksiazkowe_modul=require("Module:Książkowe");
local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"]();
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ksiazkowe_modul["NazwaKsiążki"]();
----
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
else
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
end;
end;
function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA_SPRAWDZANIE)
local pudelko_modul=require("Module:Pudełko");
if(((nazwa_przestrzeni)and(((nazwa_przestrzeni~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni)))or(nazwa_przestrzeni=="")))
and((nazwa_przestrzeni_ksiazki)and(((nazwa_przestrzeni_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni_ksiazki)))or(nazwa_przestrzeni_ksiazki=="")))
and((nazwa_ksiazki)and(nazwa_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_ksiazki)))
and((nazwa_artykulu)and(((nazwa_artykulu~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_artykulu)))or(nazwa_artykulu=="")))
)then
if(__FUNKCJA_SPRAWDZANIE)then
__FUNKCJA_SPRAWDZANIE(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
end;
else
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron");
end;
else
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron");
end;
end;
end;
end;
function p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz)
local linkobiekttab=tablica_zmiennych.linkobiekt[nazwa_obiektu];
local parametry_modul=require("Module:Parametry");
if((not tablica_zmiennych.sprawdzenie_dokonane_linku)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](linkobiekttab)))then
local parametry_modul=require("Module:Parametry");
local nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
local nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
local nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
local nazwa_artykulu=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu;
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
tablica_zmiennych.sprawdzenie_dokonane_linku=true;
end;
table.insert(linkobiekttab,uchwyt_obiektu);
if(czy_pobierz)then
if(not tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane)then
tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane={};
end;
table.insert(tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane,{{nazwa_obiektu,uchwyt_obiektu,},{obiekt,kod,},});
end;
end;
function p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz)
p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,function()
local parametry_modul=require("Module:Parametry");
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu))then
local tablica_zmiennych2={};
tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2={}
local tabela_listy_danych_analizy_ksiazki0,tablica_zmiennych2,czy_inna=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2);
if(tabela_listy_danych_analizy_ksiazki0)then
if((not czy_inna)or(not tablica_zmiennych2))then return;end;
local stronicowyparser_szablony_tekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
local JuzPoliczone=function()
if(czy_pobierz)then
stronicowyparser_szablony_tekstu_modul.UstawianiePobierz(tablica_zmiennych,tablica_zmiennych2,obiekt,kod,nazwa_obiektu,uchwyt_obiektu,false);
end;
if(not tablica_zmiennych2.dane_juz_policzone)then tablica_zmiennych2.dane_juz_policzone={};end;
local tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu];
if(not tab_nazwa_obiektu)then
tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]={};
tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu];
end;
local tab_uchwyt=tab_nazwa_obiektu[uchwyt_obiektu];
if(tab_uchwyt)then
return true;
end;
tab_nazwa_obiektu[uchwyt_obiektu]=true;
return false;
end;
if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then
local czy_policzone=JuzPoliczone();
if(czy_policzone)then
return;
end;
else
JuzPoliczone();
end;
stronicowyparser_szablony_tekstu_modul.DodawanieDoBazySzablonuTekstuStronyKorzystanejElementyInnejStrony(tablica_zmiennych,tablica_zmiennych2);
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
local czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2=tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu];
local CzyLink=czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2.CzyLink;
local ile_razy=0;
if(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2)then
for _, parametry_obiektu in ipairs(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2) do
if(parametry_obiektu[1]==uchwyt_obiektu)then
ile_razy=ile_razy+1;
if(ile_razy>1)then break;end;
end;
end;
end
if(ile_razy~=1)then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu);
end;
p.PusteParametryReferencji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
else
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera");
end;
end;
else
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
end);
end;
function p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,czy_pobierz)
local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1];
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca);
----
local parametry_modul=require("Module:Parametry");
if(parametry_modul.CzyTak(uchwyt_obiektu))then
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
uchwyt_obiektu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(uchwyt_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or uchwyt_obiektu;
local html_modul=require("Module:Html");
uchwyt_obiektu=html_modul.DecodeHtml(uchwyt_obiektu,true);
end;
----
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
----
if(parametry_modul.CzyTak(uchwyt_obiektu))then
nazwa_artykulu=(nazwa_artykulu or (nazwa_ksiazki and "" or nil));
if(nazwa_artykulu)then
if(nazwa_artykulu~="")then
if(not nazwa_ksiazki)then
nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
elseif(nazwa_ksiazki=="")then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
return;
end;
elseif((nazwa_ksiazki)and(nazwa_ksiazki~=""))then
nazwa_artykulu="";
elseif((nazwa_ksiazki)and(nazwa_ksiazki==""))then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
return;
else
nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
end;
if((nazwa_przestrzeni~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)
or(nazwa_przestrzeni_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)
or(nazwa_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)
or(nazwa_artykulu~=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then
p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz);
else
p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz);
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
else
p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz)
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then
p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,nil);
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu))then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu);
end;
KtorySzablonMaZwracacKategorie(uchwyt_obiektu);
end;
function p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, czy_artykul_korzystany,tablica_zmiennych,czy_szablon_pudelkowy_strony_zbiorczej)
local function __FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni])then self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]={};end;
local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
if(not tablica_przestrzeni[nazwa_przestrzeni_ksiazki])then tablica_przestrzeni[nazwa_przestrzeni_ksiazki]={};end;
local tablica_przestrzeni_ksiazki=tablica_przestrzeni[nazwa_przestrzeni_ksiazki];
if(not tablica_przestrzeni_ksiazki[nazwa_ksiazki])then tablica_przestrzeni_ksiazki[nazwa_ksiazki]={};end;
local tablica_ksiazki=tablica_przestrzeni_ksiazki[nazwa_ksiazki];
if(not tablica_ksiazki.lista_podstron_woluminu)then tablica_ksiazki.lista_podstron_woluminu={};end;
if(nazwa_artykulu)then
if(not tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu])then tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]={};end;
local artykul_analizowany=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu];
return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany;
else
return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki;
end;
end;
local function __FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if(not czy_artykul_korzystany)then
if(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu)then
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then
return 0,nil,nil,nil,nil,nil,self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron,false;
else
if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=true;
end;
end;
else
return nil;
end;
end;
if(self.tabela_listy_danych_analizy_ksiazki)then
if(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron)then
local tabela_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
if(tabela_przestrzeni)then
local tabela_przestrzeni_ksiazki=tabela_przestrzeni[nazwa_przestrzeni_ksiazki];
if(tabela_przestrzeni_ksiazki)then
local tabela_ksiazka=tabela_przestrzeni_ksiazki[nazwa_ksiazki];
if(tabela_ksiazka)then
local lista_artykolow=tabela_ksiazka.lista_podstron_woluminu;
if(lista_artykolow)then
local tabela_artykul=lista_artykolow[nazwa_artykulu];
if(tabela_artykul)then
local dane_zebrane_ze_stron=tabela_artykul.dane_zebrane_ze_stron;
----
if(tabela_artykul.TOCSPIS_FUNCTION)then
local wynik=tabela_artykul.TOCSPIS_FUNCTION();
if(wynik)then
tabela_artykul.TOCSPIS_FUNCTION=nil;
end;
end;
return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,true;
end;
end;
end;
end;
end;
else
return nil;
end;
else
return nil;
end;
return true;
end;
local nazwy_modul=require("Module:Nazwy");
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,czy_inna=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local function StronaSubstFunkcja(tabela_artykul,spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if((czy_szablon_pudelkowy_strony_zbiorczej)and(not czy_artykul_korzystany)and(tabela_artykul)and(not tabela_artykul.strona_zbiorcza))then
--local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
local TakFun=function(frame) return "tak";end;local NieFun=function(frame) return "";end;
tabela_artykul.strona_zbiorcza=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
end;
if(not wartosc_wyniku)then
return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna;
end;
----
local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((nazwa_przestrzeni~=nazwy_np_modul.Main)
and(nazwa_przestrzeni~=nazwy_np_modul.Wikijunior)
and((nazwa_przestrzeni~=nazwy_np_modul.User)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$")))
and((nazwa_przestrzeni~=nazwy_np_modul.Wikibooks)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$")))
)then
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
----
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local parametry_modul=require("Module:Parametry");
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
----
local tekst_rozwiniety_calego_artykulu_ref=nil;
local tablica_analizy_obiektow_strony_dany_modul_ref=nil;
local tablica_danych_parametrow_szablonu_strony_ref=nil;
----
local function InneInformacjePrzebneDoAnalizowanejKsiazki()
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"])then self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"]="tak";end;
end;
local czy_ksiazka_istnieje_w_tablicy=((tablica_ksiazki)and(tablica_ksiazki.czy_spis_analizowano))and true or false;
if(not czy_ksiazka_istnieje_w_tablicy)then
tablica_ksiazki.czy_spis_analizowano=true;
local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści");
local nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp;
local tabela_artykulow,tabela_licencji_spisu_tresci,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci=stronicowyparser_spistresci_modul.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,function(nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona)
local tablica_przestrzeni_strona=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni_strona];
if(tablica_przestrzeni_strona)then
local tablica_przestrzeni_ksiazki_strona=tablica_przestrzeni_strona[nazwa_przestrzeni_ksiazki_strona];
if(tablica_przestrzeni_ksiazki_strona)then
local tablica_ksiazki_strona=tablica_przestrzeni_ksiazki_strona[nazwa_ksiazki_strona];
if(tablica_ksiazki_strona)then
if(tablica_ksiazki_strona.spis)then
nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp=nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona;
tablica_ksiazki.spis=tablica_ksiazki_strona.spis;
tablica_ksiazki.licencja=tablica_ksiazki_strona.licencja;
tablica_ksiazki.nazwa_bazowego_spisu=tablica_ksiazki_strona.nazwa_bazowego_spisu;
tablica_ksiazki.tab_inne_spisy=tablica_ksiazki_strona.tab_inne_spisy;
tablica_ksiazki.dodatkowe_strony_woluminu=tablica_ksiazki_strona.dodatkowe_strony_woluminu;
tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=tablica_ksiazki_strona.adres_woluminu_bazowego_spisu_rzeczy;
tablica_ksiazki.referencja_do_nowej_formy_spisu={tablica_przestrzeni_strona,tablica_przestrzeni_ksiazki_strona,tablica_ksiazki_strona,};
return 1;
end;
end;
end
end;
end,function(tekst_rozwiniety_calego_artykulu_ref_spis,nazwa_przestrzeni_ref_spis,nazwa_przestrzeni_ksiazki_ref_spis,nazwa_ksiazki_ref_spis,nazwa_artykulu_ref_spis,tablica_analizy_obiektow_strony_dany_modul_ref_spis,tablica_danych_parametrow_szablonu_strony_ref_spis)
----
if((nazwa_przestrzeni==nazwa_przestrzeni_ref_spis)and(nazwa_przestrzeni_ksiazki==nazwa_przestrzeni_ksiazki_ref_spis)and(nazwa_ksiazki==nazwa_ksiazki_ref_spis)and(nazwa_artykulu==nazwa_artykulu_ref_spis))then
tekst_rozwiniety_calego_artykulu_ref=tekst_rozwiniety_calego_artykulu_ref_spis;
local parametry_modul=require("Module:Parametry");
tablica_analizy_obiektow_strony_dany_modul_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_analizy_obiektow_strony_dany_modul_ref_spis);
tablica_danych_parametrow_szablonu_strony_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_danych_parametrow_szablonu_strony_ref_spis);
end;
----
end);
local function __FUNKCJA_SPISU(tablica_ksiazki,czy_podac_adres)
tablica_ksiazki.spis=tabela_artykulow;
if(czy_artykul_korzystany)then
tablica_ksiazki.licencja=tabela_licencji_spisu_tresci;
end;
tablica_ksiazki.nazwa_bazowego_spisu=nazwa_glownego_spisu;
tablica_ksiazki.tab_inne_spisy=tab_inne_spisy;
tablica_ksiazki.dodatkowe_strony_woluminu=dodatkowe_artykuly;
tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=czy_podac_adres and adres_ksiazki_glownego_spisu_tresci or nil;
end;
if(tabela_artykulow==0)then
if(czy_artykul_korzystany)then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"korzystana strona główna nie istnieje");
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"dołączone strony główne nie istnieją",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
elseif(tabela_artykulow)then
if(parametry_modul.TypeTable(tabela_artykulow))then
if(adres_ksiazki_glownego_spisu_tresci)then
__FUNKCJA_SPISU(tablica_ksiazki,true);
local tablica_ksiazki_stara=tablica_ksiazki;
local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true);
local nazwa_przestrzeni=adres_ksiazki_glownego_spisu_tresci[1];
local nazwa_przestrzeni_ksiazki=adres_ksiazki_glownego_spisu_tresci[2];
local nazwa_ksiazki=adres_ksiazki_glownego_spisu_tresci[3];
if((kod_wyniku==1)or(kod_wyniku==2))then
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
if(not wartosc_wyniku)then
return wartosc_wyniku,true;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
local nazwa_artykulu=artykul;
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,true;
end;
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni ,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,};
__FUNKCJA_SPISU(tablica_ksiazki,false);
return nil,nil,artykul,kod_wyniku;
elseif((kod_wyniku==3)or(kod_wyniku==4))then
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,};
__FUNKCJA_SPISU(tablica_ksiazki,false);
return nil,nil,artykul,kod_wyniku;
end;
else
__FUNKCJA_SPISU(tablica_ksiazki,false);
end;
elseif(tabela_artykulow~=1)then
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(not wartosc_wyniku)then
return wartosc_wyniku,true;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,true;
end;
end;
else
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"))then
if(((self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=="")and(nazwa_artykulu~=""))or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=""))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych książek na ich stronach głównych",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
end;
end;
end;
end;
end;
----
local wartosc_wyniku,wynik_bledu,artykul_bazowy,kod_wyniku_bazowy=InneInformacjePrzebneDoAnalizowanejKsiazki();
if(wynik_bledu)then return wartosc_wyniku;end;
local kod_wyniku_przekierowan=kod_wyniku_bazowy;
----
--if((not tablica_przestrzeni)or(not tablica_przestrzeni_ksiazki)or(not tablica_ksiazki)or(not artykul_analizowany))then
-- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
--end;
----
if((tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy)and(kod_wyniku_bazowy))--[[and((kod_wyniku_bazowy==1)or(kod_wyniku_bazowy==2))]]then
----
nazwa_przestrzeni=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[1];
nazwa_przestrzeni_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[2];
nazwa_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[3];
nazwa_artykulu=artykul_bazowy;
----
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=tablica_ksiazki.referencja_do_nowej_formy_spisu[1],tablica_ksiazki.referencja_do_nowej_formy_spisu[2],tablica_ksiazki.referencja_do_nowej_formy_spisu[3];
end;
local tabela_artykulow=tablica_ksiazki.spis;
if(tabela_artykulow)then
local nazwa_glownego_spisu=tablica_ksiazki.nazwa_bazowego_spisu;
local tab_inne_spisy=tablica_ksiazki.tab_inne_spisy;
local dodatkowe_artykuly=tablica_ksiazki.dodatkowe_strony_woluminu
local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,false);
if(kod_wyniku)then
nazwa_artykulu=artykul;
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
kod_wyniku_przekierowan=kod_wyniku_przekierowan or kod_wyniku;
end;
local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local PrzekierownieAwaryjne=function()
if(not kod_wyniku_przekierowan)then
--local artykul2,kod_wyniku2=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true);
local techniczne_modul=require("Module:Techniczne");
local strona=techniczne_modul.PrzekierowanieDoStrony(nazwa_modulu);
if(strona)then
if(strona~=nazwa_modulu)then
----
local tabela_nazw={};
nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw);
nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw);
nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw) or nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw));
nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazwa);
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(not wartosc_wyniku)then
return wartosc_wyniku;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku;
end;
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
nazwa_modulu=strona;
else
return 0;
end;
end;
end;
end;
local wynik=PrzekierownieAwaryjne();
if(czy_artykul_korzystany)then
self.nazwa_modulu_biezaca=nazwa_modulu;
end;
if(wynik)then return wynik;end;
----
if(czy_artykul_korzystany)then
if((not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then
self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni;
self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu=nazwa_przestrzeni_ksiazki;
self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu=nazwa_ksiazki;
self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=nazwa_artykulu;
end;
end;
local nazwa_modulu_aktualna_czy_biezaca=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu) or nazwa_modulu;
-- przydzielanie tablicy
if(czy_artykul_korzystany)then
artykul_analizowany.artykul_biezacy=true;
tablica_ksiazki.ksiazka_analizowana=true;
end;
--koniec
--local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}");
if(not tablica_zmiennych)then tablica_zmiennych={};end;
if(not tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2)then tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={};end;
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
for _,element_w_tablicy_obiekt in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do
local CzyLink=element_w_tablicy_obiekt.CzyLink;
local CzyNum=element_w_tablicy_obiekt.CzyNum;
local wartosc=element_w_tablicy_obiekt[1];
tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum,};
if(czy_artykul_korzystany)then tablica_zmiennych.linkobiekt[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum;};end;
end;
local function StronaZbiorcza()
if(czy_artykul_korzystany)then
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end;
local wynik=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,tablica_ksiazki.spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
artykul_analizowany.strona_zbiorcza=(wynik and "tak" or "");
return wynik;
end;
return nil;
end;
local strona_zbiorcza=StronaZbiorcza();
local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
----
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony;
if((not tekst_rozwiniety_calego_artykulu_ref)or(not tablica_analizy_obiektow_strony_dany_modul_ref)or(not tablica_danych_parametrow_szablonu_strony_ref))then
tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))and true or nil),
nil)
else
tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=tekst_rozwiniety_calego_artykulu_ref,tablica_analizy_obiektow_strony_dany_modul_ref,tablica_danych_parametrow_szablonu_strony_ref;
end;
----
if(not czy_artykul_korzystany)then
if(not tekst_rozwiniety_calego_artykulu)then return 0;end;
end;
if(czy_artykul_korzystany)then
if(not tekst_rozwiniety_calego_artykulu)then
if(strona_zbiorcza)then
self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak";
end;
return nil;
end;
end;
local szablonowe_modul=require("Module:Szablonowe");
local parametry_modul=require("Module:Parametry");
if((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))then
local aktualna_nazwa_modulu=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwa_modulu_aktualna_czy_biezaca or nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu);
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(self,aktualna_nazwa_modulu);
if(tekst)then
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,aktualna_nazwa_modulu);
local tablica_danych_parametrow_szablonu_strony={};
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,aktualna_nazwa_modulu,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
if(stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
return true;
elseif(stronicowyparser_obiekty_modul.strona_start[nazwa_szablonu])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or "";
local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC";
if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return true;
end;
end);
if(wynik)then break;end;
end;
end;
end;
end;
local uzyskano_w_wyniku_parsowania_wywolanie_szablonu;
local analiza_stron_korzystanych_zbiorczych=nil;
local stronastart=nil;
----
local tablica_obiekty=stronicowyparser_obiekty_modul.obiekty;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty;
local format_elementowy_referencji_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_referencji_obiektowy;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu;
local szablony_wykorzystywane_przez_strony_zbiorcze=stronicowyparser_obiekty_modul.szablony_wykorzystywane_przez_strony_zbiorcze;
local format_elementowy_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_obiektowy;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu;
----
local strona_start=stronicowyparser_obiekty_modul.strona_start;
local strona_start_ze_spisem_rzeczy_strony=stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony;
local strona_start_inne=stronicowyparser_obiekty_modul.strona_start_inne;
local szablony_strony_zbiorczej=stronicowyparser_obiekty_modul.strona_zbiorcza;
----
local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe;
local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe;
local tab_szablony_stronicowe_formatowania_tekstu=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu;
local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego;
----
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
local tabela_elementow_strony_kodow={};
-- for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do
local function AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer)
if(czy_artykul_korzystany)then
if(tabela_parametrow_szablonu)then
if((not stronastart)and(self.tabela_listy_danych_analizy_ksiazki.formatowanie==nil))then
if(strona_start[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
stronastart=true;
local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or "";
local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC";
if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return;
elseif(strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
stronastart=true;
return;
elseif(strona_start_inne[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
stronastart=true;
return;
elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
analiza_stron_korzystanych_zbiorczych=true;
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not parametry_modul.CzyTak(nazwa_prestreni_nazw))and(not parametry_modul.CzyTak(nazwa_jednostki)))then
return;
end;
end;
elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
analiza_stron_korzystanych_zbiorczych=true;
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not parametry_modul.CzyTak(nazwa_przestrzeni))and(not parametry_modul.CzyTak(nazwa_jednostki)))then
return;
end;
end;
end;
end;
local plik=mw.ustring.match(nazwa_szablonu_wywolania,"^:");
if(plik==nil)then
if(tabela_parametrow_szablonu)then
if(not parametry_modul.CzyTak(tabela_parametrow_szablonu["bez automatu"]))then
local czy_wypowiedzenie=(nazwa_szablonu_wywolania=="Wypowiedzenie");
local czy_linkobiekt;
local czy_link;local czy_pobierz;
local czy_wypowiedzenie_z_parametrami;
local czy_linkobiekt_z_parametrami;
if(czy_wypowiedzenie)then
czy_linkobiekt=false;
czy_link=false;
czy_pobierz=false;
czy_wypowiedzenie_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["rodzaj"]);
else
czy_linkobiekt=(nazwa_szablonu_wywolania=="LinkObiekt");
if(czy_linkobiekt)then
czy_link=true;
czy_pobierz=false;
czy_linkobiekt_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["typ"]);
else
czy_link=mw.ustring.match(nazwa_szablonu_wywolania,"^Link");
czy_pobierz=(not czy_link) and mw.ustring.match(nazwa_szablonu_wywolania,"^Pobierz") or nil;
end;
end;
if((not czy_link)and(not czy_pobierz))then
local wartosc_elementu;local numer_uchwytu;
if(not czy_wypowiedzenie_z_parametrami) then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania];
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
else
local rodzaj=tabela_parametrow_szablonu["rodzaj"];
if(rodzaj)then
wartosc_elementu=format_elementowy_obiektowy[rodzaj] and rodzaj or nil;
if(wartosc_elementu)then
numer_uchwytu=tablica_obiekty[5];
end;
end;
end;
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
end;
elseif(czy_artykul_korzystany)then
if(czy_link)then
local wartosc_elementu;
if(not czy_linkobiekt_z_parametrami)then
wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania];
else
local typ=tabela_parametrow_szablonu["typ"];
if(typ)then
typ=format_elementowy_referencji_obiektowy[typ] and typ or nil;
if(typ)then
wartosc_elementu=mw.getContentLanguage():ucfirst(typ);
end;
end;
end;
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Link"..wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
else
local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu[nazwa_szablonu_wywolania];
if(wartosc_elementu)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
else
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
end;
return;
end;
end;
elseif(czy_pobierz)then
local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania];
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,true);
return;
end;
end;
end;
if(czy_wypowiedzenie)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Obiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artykul_korzystany,tablica_obiekty[5],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu[nazwa_szablonu_wywolania])then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka[nazwa_szablonu_wywolania];
local wartosc_elementu;local numer_uchwytu;
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,wartosc_elementu,lista_dwuelementowa,kod);
if(czy_artykul_korzystany)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return;
elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_tekstu[nazwa_szablonu_wywolania])then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania];
local wartosc_elementu;local numer_uchwytu;
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
if(lista_dwuelementowa)then
local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
local tekst=stronicowyparser_szablonytekstu_modul.ParametrTekstowySzablonuTekstu(tabela_parametrow_szablonu);
local bez_preprocess=stronicowyparser_szablonytekstu_modul.SzablonTekstuBezPreProcess(tabela_parametrow_szablonu);
local czy_bez_preprocess=parametry_modul.CzyTak(bez_preprocess);
if(tekst)then
local czy_szablon_wszystko=false;
tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul,
function(szablon,obiekt,kod)
if(czy_bez_preprocess)then return nil;end;
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
if(
(tab_szablony[nazwa_szablonu])
or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu])
or(tab_szablony_stronicowe_formatowania_tekstu[nazwa_szablonu])
or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu])
)then
if(not czy_artykul_korzystany)then
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=tabela_parametrow_szablonu["nazwa jednostki"] or (((nazwa_przestrzeni_ksiazki~="") and (nazwa_przestrzeni_ksiazki.."/") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or ""))
if(self)then
local czy_link_lub_pobierz=mw.ustring.match(nazwa_szablonu,"^Link") or mw.ustring.match(nazwa_szablonu,"^Pobierz");
if(czy_link_lub_pobierz)then
p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca);
else
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu);
end;
end;
end;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end;
return nil;
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- instrukcje warunkowe;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- wywołania ramek Lua w Scribunto
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- tagi szablonowe;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end);
czy_szablon_wszystko=czy_szablon_wszystko or true;
if(wynik)then return wynik;end;
elseif(obiekt=="ZMIENNA")then
czy_szablon_wszystko=czy_szablon_wszystko or true;
local zawartosc=mw.ustring.match(szablon,"^{{{(.*)}}}$");
if(zawartosc)then
zawartosc=mw.ustring.gsub(zawartosc,"|","{{!}}");
return "{{(((}}"..zawartosc.."{{)))}}";
end;
end;
end);
if((czy_szablon_wszystko)and(not bez_preprocess))then
local frame=mw.getCurrentFrame();
tekst=frame:preprocess(tekst);
end;
lista_dwuelementowa[2]=tekst;
end;
--local __metatabelka=getmetatable(tabela_parametrow_szablonu);
--if(__metatabelka)then setmetatable(tabela_parametrow_szablonu,nil);end;
stronicowyparser_szablonytekstu_modul.DodawanieDoBazyStronySzablonuTekstu(tablica_zmiennych,wartosc_elementu,lista_dwuelementowa,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,czy_artykul_korzystany);
end;
return;
elseif(czy_artykul_korzystany)then
if(czy_linkobiekt)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="LinkObiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,"Obiekt",nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
else
if(stronicowyparser_obiekty_modul.szablony_z_lokalnym_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
return;
elseif(stronicowyparser_obiekty_modul.bez_uchwytow_spis_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
local nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2] or "";
local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1] or "";
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "")
end;
end;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie);
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
else
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
end;
return;
else
local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
local nazwy_modul=require("Module:Nazwy");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or "";
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or "";
local nazwa_symulacyjnej_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
local uchwyt=nazwa_szablonu_wywolania..":"..nazwa_symulacyjnej_strony;
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=uchwyt;
end;
end;
if((stronicowyparser_obiekty_modul.szablony_kontenerowe[nazwa_szablonu_wywolania])
or(szablony_strony_zbiorczej[nazwa_szablonu_wywolania])
)then
if(szablony_wykorzystywane_przez_strony_zbiorcze[nazwa_szablonu_wywolania])then
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie);
else
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,nil,KtorySzablonMaZwracacKategorie);
end;
return;
elseif((strona_zbiorcza)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie);
return;
end;
end;
end;
end;
end;
end;
end;
end;
----
local function GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer)
stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego);
end;
local function IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu,tab_numer)
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul);
for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do
GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer);
end;
end;
IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu);
----
local tablica_danych_nazwy_artykulu=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu] or {};
tablica_danych_nazwy_artykulu.uchwyty_i_numeracje=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2;
----
local wiki_modul=require("Module:Wiki");
tablica_danych_nazwy_artykulu.link_wikidane={wiki_modul.KodyKlasStronyNaDanejWiki{["strona"]=nazwa_modulu_aktualna_czy_biezaca,["nagłówek"]=true,["aktywny"]=true,},};
----
if(czy_artykul_korzystany)then
if(analiza_stron_korzystanych_zbiorczych)then
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
tekst_rozwiniety_calego_artykulu=stronicowyparser_stronasubst_modul.LiczOperacjeStronZbiorczych(self,tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
end;
end;
local strona;
if(czy_artykul_korzystany)then strona="";else strona=nazwa_modulu;end;
----
if(czy_artykul_korzystany)then
local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
stronicowyparser_szablonytekstu_modul.UstawPobierzKorzystanie(tablica_zmiennych);
tekst_rozwiniety_calego_artykulu=stronicowyparser_szablonytekstu_modul.AktualizowanieSzablonowychTekstowychKompletowaniaInformacjiTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,IterowaniePoElementachTekstu) or tekst_rozwiniety_calego_artykulu;
end;
----
local function SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,tabela_elementow_strony_kodow,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca)
return function()
if(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane))
or((not czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)))then
----
local tablica_obiektow_strony_danych_kodow_specjalnych_modul=nil;
----
tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_danych_kodow_specjalnych_modul=szablonowe_modul:KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false);
----
local function KtorySzablonMaZwracacKategorieNaglowek(numeracja_aktualna,nazwa_szablonu)
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej");
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"powtórka nagłówek w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
end;
local function KtorySzablonMaZwracacKategorieTekst(numeracja_aktualna,nazwa_szablonu)
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej");
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"nagłowek w tekście rozdziału w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
end;
local function CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu()
return stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej");
end;
local nazwa_naglowka=stronicowyparser_obiekty_modul.nazwa_szablonu_wprowadzenia_tekstu;
local stronicowyparser_glownafunkcjazbieraniadanych_modul=require("Module:StronicowyParser/GłównaFunkcjaZbieraniaDanychStron");
local tablica_naglowka_obiekty=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_naglowka];
tablica_naglowka_obiekty.uchwyty_bez_numeracji={};
local toc=stronicowyparser_glownafunkcjazbieraniadanych_modul.SpisRzeczyWedlePodanegoTekstu(self,tekst_rozwiniety_calego_artykulu,strona, czy_artykul_korzystany,nil,tablica_naglowka_obiekty.uchwyty_bez_numeracji, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,{KtorySzablonMaZwracacKategorieNaglowek,KtorySzablonMaZwracacKategorieTekst,CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu,},nil,tabela_elementow_strony_kodow);
tablica_danych_nazwy_artykulu.TOC=toc;
return true;
end;
end;
end;
local czy_spis_function=SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,tabela_elementow_strony_kodow,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca);
local wynik=czy_spis_function();
if(not czy_artykul_korzystany)then
if(not wynik)then
tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=czy_spis_function;
end;
end;
StronaSubstFunkcja(tablica_danych_nazwy_artykulu,tablica_ksiazki.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(czy_artykul_korzystany)then
self.tabela_listy_danych_analizy_ksiazki.link_wikidane=tablica_danych_nazwy_artykulu.link_wikidane;
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykulu=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2;
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw[nazwa_przestrzeni_ksiazki];
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki[nazwa_ksiazki];
--self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron=tablica_zmiennych;
end;
if(not czy_artykul_korzystany)then
tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=tablica_zmiennych;
if(not self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista)then self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista={};end;
table.insert(self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista,tablica_danych_nazwy_artykulu);
else
local dane_zebrane_ze_stron_lista=self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista;
if(dane_zebrane_ze_stron_lista)then
for _,tablica_danych_nazwy_artykulu in ipairs(dane_zebrane_ze_stron_lista)do
tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=nil;
tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=nil;
end;
end;
tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane=nil;
end;
return self.tabela_listy_danych_analizy_ksiazki,tablica_zmiennych,true;
end;
return p;
8g41w1vncz01gc2iuqbw236gs0m4ce4
551278
551273
2026-08-10T19:30:20Z
Persino
2851
551278
Scribunto
text/plain
local p={};
function p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,lista_dwuelementowa,kod)
if(lista_dwuelementowa)then
local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
if(not tab_obiekt)then
tabela_elementow_strony_kodow[nazwa_obiektu]={};
tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
end;
local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
if(not uchwyty_bez_numeracji)then
tab_obiekt.uchwyty_bez_numeracji={};
uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
end;
uchwyty_bez_numeracji[kod]=lista_dwuelementowa;
end;
end;
function p.WydobywanieUchwytuZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,kod)
local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
if(not tab_obiekt)then return nil;end;
local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
if(uchwyty_bez_numeracji)then
return uchwyty_bez_numeracji[kod];
end;
end;
function p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie)
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
kod_uchwytu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(kod_uchwytu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or kod_uchwytu;
local html_modul=require("Module:Html");
kod_uchwytu=html_modul.DecodeHtml(kod_uchwytu,true);
if(kod_uchwytu~="")then
KtorySzablonMaZwracacKategorie(kod_uchwytu);
local lista_dwuelementowa={};
lista_dwuelementowa[1]=kod_uchwytu;
local parametry_modul=require("Module:Parametry");
if((not tablica_zmiennych.sprawdzenie_dokonane_obiektu)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu])))then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu);
end;
tablica_zmiennych.sprawdzenie_dokonane_obiektu=true;
end;
if(tab_numer)then
tab_numer[nazwa_obiektu]=tab_numer[nazwa_obiektu]+1;
local numer=tab_numer[nazwa_obiektu];
table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],numer,lista_dwuelementowa);
else
table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa);
end;
return lista_dwuelementowa;
end;
end;
function p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie)
local kod_uchwytu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[numer_numeracji];
if(kod_uchwytu)then
local lista_dwuelementowa=p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return lista_dwuelementowa;
end;
end;
function p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then
if(nazwa_artykulu=="")then return;end;
local czy_element_wystepuje_w_tablicy=false;
local tablica_przestrzeni_wszystkiego=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron;
if(tablica_przestrzeni_wszystkiego)then
local tabela_przestrzeni_ksiazek=tablica_przestrzeni_wszystkiego[nazwa_przestrzeni];
if(tabela_przestrzeni_ksiazek)then
local tabela_ksiazek=tabela_przestrzeni_ksiazek[nazwa_przestrzeni_ksiazki]
if(tabela_ksiazek)then
local tab_ksiazki=tabela_ksiazek[nazwa_ksiazki];
if(tab_ksiazki)then
if(tab_ksiazki.spis)then
--czy_lista_niepusta=true;
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
for _,tab_value in ipairs(tab_ksiazki.spis)do
if(tab_value[2])then
for _,artykul_w_bazie_element in ipairs(tab_value[2])do
local artykul_w_bazie=artykul_w_bazie_element[1];
local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie);
artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie;
local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie);
if(artykul_bez_naglowka_w_bazie==nazwa_artykulu)then
czy_element_wystepuje_w_tablicy=true;
break;
end;
end;
end;
if(czy_element_wystepuje_w_tablicy)then break;end;
end;
end;
end;
end;
end;
end;
if(not czy_element_wystepuje_w_tablicy)then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu~=nazwa_przestrzeni_ksiazki)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu~=nazwa_ksiazki)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=nazwa_artykulu))then
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych stron",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"))then
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisu treści do korzystanych stron");
end;
end;
end;
end;
end;
function p.PusteParametryReferencji(self, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu)
local czy_ksiazka_z_tylko_odstepami_lub_pusty=(nazwa_ksiazki)and (nazwa_ksiazki=="") or nil;
local czy_artykul_z_tylko_odstepami_lub_pusty=(nazwa_artykulu)and (nazwa_artykulu=="") or nil;
local czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty=(uchwyt_obiektu)and (uchwyt_obiektu=="") or nil;
----
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
----
if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1);
end;
end;
if(czy_artykul_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2);
end;
end;
if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3);
end;
end;
end;
function p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca,bezuchwytowe)
local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[bezuchwytowe and 1 or 2];
local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[bezuchwytowe and 2 or 3];
local parametry_modul=require("Module:Parametry");
local nazwy_modul=require("Module:Nazwy");
local html_modul=require("Module:Html");
if(nazwa_artykulu)then
nazwa_artykulu=html_modul.DecodeHtml(nazwa_artykulu,true);
local techniczne_modul=require("Module:Techniczne");
nazwa_artykulu=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=nazwa_artykulu,[2]="",};
end;
local nazwa_ksiazki;local nazwa_przestrzeni_ksiazki;local nazwa_przestrzeni;
if(pelna_nazwa_ksiazki)then
pelna_nazwa_ksiazki=html_modul.DecodeHtml(pelna_nazwa_ksiazki,true);
local techniczne_modul=require("Module:Techniczne");
pelna_nazwa_ksiazki=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=pelna_nazwa_ksiazki,[2]=nazwa_modulu_aktualna_czy_biezaca,};
----
local tabela_nazw={};
local ksiazkowe_modul=require("Module:Książkowe");
pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)));
--pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
end;
return nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu;
end;
function p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst,tab_nazwy)
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu;
if(not czy_inna_wartosc_tekst)then
nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,true);
else
nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=tab_nazwy[1],tab_nazwy[2],tab_nazwy[3],tab_nazwy[4];
end;
--local ksiazkowe_modul=require("Module:Książkowe");
--pelna_nazwa_ksiazki=pelna_nazwa_ksiazki or ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"]();
--nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"]();
if((nazwa_przestrzeni)or(nazwa_przestrzeni_ksiazki)or(nazwa_ksiazki)or(nazwa_artykulu))then
local tabela_nazw={};
local ksiazkowe_modul=require("Module:Książkowe");
local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw);
local nazwa_przestrzeni_ksiazki=nazwa_przestrzeni_ksiazki or ksiazkowe_modul["NazwaPrzestrzeniKsiążki"](nil,tabela_nazw);
local nazwa_ksiazki=nazwa_ksiazki or ksiazkowe_modul["NazwaTytułuKsiążki"](nil,tabela_nazw);
local nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](nil,tabela_nazw);
if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end;
local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false);
end;
end;
function p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,czy_szablon_pudelkowy_strony_zbiorczej,KtorySzablonMaZwracacKategorie)
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not nazwa_przestrzeni)and(not nazwa_jednostki))then return;end;
local parametry_modul=require("Module:Parametry");
if((nazwa_jednostki) and (nazwa_jednostki==""))then return;end;
local szablonowe_modul=require("Module:Szablonowe");
if((nazwa_jednostki and mw.ustring.match(nazwa_jednostki,szablonowe_modul.NormaWzoruKodowaniaTekstu()))
or (nazwa_przestrzeni and mw.ustring.match(nazwa_przestrzeni,szablonowe_modul.NormaWzoruKodowaniaTekstu()))
)then return;end;
local nazwy_modul=require("Module:Nazwy");
local ksiazkowe_modul=require("Module:Książkowe");
local html_modul=require("Module:Html");
if(nazwa_jednostki)then
nazwa_jednostki=html_modul.DecodeHtml(nazwa_jednostki,true);
end;
local tabela_nazw_art={};
local nazwa_jednostki=(nazwa_jednostki
and mw.ustring.gsub(nazwa_jednostki,"^([^#]*)#(.*)$","%1")
or nil
) or ksiazkowe_modul["NazwaArtykułu"](nil,tabela_nazw_art);
if(nazwa_przestrzeni)then
nazwa_przestrzeni=html_modul.DecodeHtml(nazwa_przestrzeni,true);
end;
local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw_art);
local strona=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
local techniczne_modul=require("Module:Techniczne");
strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=self.nazwa_modulu_biezaca,};
--strona=ksiazkowe_modul["PEŁNANAZWASTRONY"](strona);
local tabela_nazw={};
local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw);
local nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw);
local nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw)));
local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazw);
if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end;
local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,nil,czy_szablon_pudelkowy_strony_zbiorczej);
end;
function p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca)
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca);
local nazwy_modul=require("Module:Nazwy");
local czy_inna_wartosc_tekst=true;
if((nazwa_artykulu)and(nazwa_ksiazki))then
--local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwy_modul["NazwaModułu"]("",nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
elseif((nazwa_artykulu)and(not nazwa_ksiazki))then
local ksiazkowe_modul=require("Module:Książkowe");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"]();
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or (ksiazkowe_modul["NazwaKsiążki"]()..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or ""));
----
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
elseif((not nazwa_artykulu)and(nazwa_ksiazki))then
local ksiazkowe_modul=require("Module:Książkowe");
local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"]();
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ksiazkowe_modul["NazwaKsiążki"]();
----
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
else
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
end;
end;
function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA_SPRAWDZANIE)
local pudelko_modul=require("Module:Pudełko");
if(((nazwa_przestrzeni)and(((nazwa_przestrzeni~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni)))or(nazwa_przestrzeni=="")))
and((nazwa_przestrzeni_ksiazki)and(((nazwa_przestrzeni_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni_ksiazki)))or(nazwa_przestrzeni_ksiazki=="")))
and((nazwa_ksiazki)and(nazwa_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_ksiazki)))
and((nazwa_artykulu)and(((nazwa_artykulu~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_artykulu)))or(nazwa_artykulu=="")))
)then
if(__FUNKCJA_SPRAWDZANIE)then
__FUNKCJA_SPRAWDZANIE(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
end;
else
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron");
end;
else
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron");
end;
end;
end;
end;
function p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz)
local linkobiekttab=tablica_zmiennych.linkobiekt[nazwa_obiektu];
local parametry_modul=require("Module:Parametry");
if((not tablica_zmiennych.sprawdzenie_dokonane_linku)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](linkobiekttab)))then
local parametry_modul=require("Module:Parametry");
local nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
local nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
local nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
local nazwa_artykulu=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu;
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
tablica_zmiennych.sprawdzenie_dokonane_linku=true;
end;
table.insert(linkobiekttab,uchwyt_obiektu);
if(czy_pobierz)then
if(not tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane)then
tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane={};
end;
table.insert(tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane,{{nazwa_obiektu,uchwyt_obiektu,},{obiekt,kod,},});
end;
end;
function p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz)
p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,function()
local parametry_modul=require("Module:Parametry");
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu))then
local tablica_zmiennych2={};
tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2={}
local tabela_listy_danych_analizy_ksiazki0,tablica_zmiennych2,czy_inna=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2);
if(tabela_listy_danych_analizy_ksiazki0)then
if((not czy_inna)or(not tablica_zmiennych2))then return;end;
local stronicowyparser_szablony_tekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
local JuzPoliczone=function()
if(czy_pobierz)then
stronicowyparser_szablony_tekstu_modul.UstawianiePobierz(tablica_zmiennych,tablica_zmiennych2,obiekt,kod,nazwa_obiektu,uchwyt_obiektu,false);
end;
if(not tablica_zmiennych2.dane_juz_policzone)then tablica_zmiennych2.dane_juz_policzone={};end;
local tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu];
if(not tab_nazwa_obiektu)then
tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]={};
tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu];
end;
local tab_uchwyt=tab_nazwa_obiektu[uchwyt_obiektu];
if(tab_uchwyt)then
return true;
end;
tab_nazwa_obiektu[uchwyt_obiektu]=true;
return false;
end;
if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then
local czy_policzone=JuzPoliczone();
if(czy_policzone)then
return;
end;
else
JuzPoliczone();
end;
stronicowyparser_szablony_tekstu_modul.DodawanieDoBazySzablonuTekstuStronyKorzystanejElementyInnejStrony(tablica_zmiennych,tablica_zmiennych2);
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
local czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2=tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu];
local CzyLink=czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2.CzyLink;
local ile_razy=0;
if(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2)then
for _, parametry_obiektu in ipairs(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2) do
if(parametry_obiektu[1]==uchwyt_obiektu)then
ile_razy=ile_razy+1;
if(ile_razy>1)then break;end;
end;
end;
end
if(ile_razy~=1)then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu);
end;
p.PusteParametryReferencji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
else
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera");
end;
end;
else
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
end);
end;
function p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,czy_pobierz)
local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1];
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca);
----
local parametry_modul=require("Module:Parametry");
if(parametry_modul.CzyTak(uchwyt_obiektu))then
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
uchwyt_obiektu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(uchwyt_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or uchwyt_obiektu;
local html_modul=require("Module:Html");
uchwyt_obiektu=html_modul.DecodeHtml(uchwyt_obiektu,true);
end;
----
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
----
if(parametry_modul.CzyTak(uchwyt_obiektu))then
nazwa_artykulu=(nazwa_artykulu or (nazwa_ksiazki and "" or nil));
if(nazwa_artykulu)then
if(nazwa_artykulu~="")then
if(not nazwa_ksiazki)then
nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
elseif(nazwa_ksiazki=="")then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
return;
end;
elseif((nazwa_ksiazki)and(nazwa_ksiazki~=""))then
nazwa_artykulu="";
elseif((nazwa_ksiazki)and(nazwa_ksiazki==""))then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
return;
else
nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
end;
if((nazwa_przestrzeni~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)
or(nazwa_przestrzeni_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)
or(nazwa_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)
or(nazwa_artykulu~=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then
p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz);
else
p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz);
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
else
p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz)
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then
p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,nil);
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu))then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu);
end;
KtorySzablonMaZwracacKategorie(uchwyt_obiektu);
end;
function p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, czy_artykul_korzystany,tablica_zmiennych,czy_szablon_pudelkowy_strony_zbiorczej)
local function __FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni])then self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]={};end;
local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
if(not tablica_przestrzeni[nazwa_przestrzeni_ksiazki])then tablica_przestrzeni[nazwa_przestrzeni_ksiazki]={};end;
local tablica_przestrzeni_ksiazki=tablica_przestrzeni[nazwa_przestrzeni_ksiazki];
if(not tablica_przestrzeni_ksiazki[nazwa_ksiazki])then tablica_przestrzeni_ksiazki[nazwa_ksiazki]={};end;
local tablica_ksiazki=tablica_przestrzeni_ksiazki[nazwa_ksiazki];
if(not tablica_ksiazki.lista_podstron_woluminu)then tablica_ksiazki.lista_podstron_woluminu={};end;
if(nazwa_artykulu)then
if(not tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu])then tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]={};end;
local artykul_analizowany=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu];
return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany;
else
return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki;
end;
end;
local function __FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if(not czy_artykul_korzystany)then
if(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu)then
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then
return 0,nil,nil,nil,nil,nil,self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron,false;
else
if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=true;
end;
end;
else
return nil;
end;
end;
if(self.tabela_listy_danych_analizy_ksiazki)then
if(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron)then
local tabela_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
if(tabela_przestrzeni)then
local tabela_przestrzeni_ksiazki=tabela_przestrzeni[nazwa_przestrzeni_ksiazki];
if(tabela_przestrzeni_ksiazki)then
local tabela_ksiazka=tabela_przestrzeni_ksiazki[nazwa_ksiazki];
if(tabela_ksiazka)then
local lista_artykolow=tabela_ksiazka.lista_podstron_woluminu;
if(lista_artykolow)then
local tabela_artykul=lista_artykolow[nazwa_artykulu];
if(tabela_artykul)then
local dane_zebrane_ze_stron=tabela_artykul.dane_zebrane_ze_stron;
----
if(tabela_artykul.TOCSPIS_FUNCTION)then
local wynik=tabela_artykul.TOCSPIS_FUNCTION();
if(wynik)then
tabela_artykul.TOCSPIS_FUNCTION=nil;
end;
end;
return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,true;
end;
end;
end;
end;
end;
else
return nil;
end;
else
return nil;
end;
return true;
end;
local nazwy_modul=require("Module:Nazwy");
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,czy_inna=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local function StronaSubstFunkcja(tabela_artykul,spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if((czy_szablon_pudelkowy_strony_zbiorczej)and(not czy_artykul_korzystany)and(tabela_artykul)and(not tabela_artykul.strona_zbiorcza))then
--local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
local TakFun=function(frame) return "tak";end;local NieFun=function(frame) return "";end;
tabela_artykul.strona_zbiorcza=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
end;
if(not wartosc_wyniku)then
return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna;
end;
----
local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((nazwa_przestrzeni~=nazwy_np_modul.Main)
and(nazwa_przestrzeni~=nazwy_np_modul.Wikijunior)
and((nazwa_przestrzeni~=nazwy_np_modul.User)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$")))
and((nazwa_przestrzeni~=nazwy_np_modul.Wikibooks)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$")))
)then
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
----
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local parametry_modul=require("Module:Parametry");
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
----
local tekst_rozwiniety_calego_artykulu_ref=nil;
local tablica_analizy_obiektow_strony_dany_modul_ref=nil;
local tablica_danych_parametrow_szablonu_strony_ref=nil;
----
local function InneInformacjePrzebneDoAnalizowanejKsiazki()
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"])then self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"]="tak";end;
end;
local czy_ksiazka_istnieje_w_tablicy=((tablica_ksiazki)and(tablica_ksiazki.czy_spis_analizowano))and true or false;
if(not czy_ksiazka_istnieje_w_tablicy)then
tablica_ksiazki.czy_spis_analizowano=true;
local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści");
local nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp;
local tabela_artykulow,tabela_licencji_spisu_tresci,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci=stronicowyparser_spistresci_modul.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,function(nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona)
local tablica_przestrzeni_strona=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni_strona];
if(tablica_przestrzeni_strona)then
local tablica_przestrzeni_ksiazki_strona=tablica_przestrzeni_strona[nazwa_przestrzeni_ksiazki_strona];
if(tablica_przestrzeni_ksiazki_strona)then
local tablica_ksiazki_strona=tablica_przestrzeni_ksiazki_strona[nazwa_ksiazki_strona];
if(tablica_ksiazki_strona)then
if(tablica_ksiazki_strona.spis)then
nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp=nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona;
tablica_ksiazki.spis=tablica_ksiazki_strona.spis;
tablica_ksiazki.licencja=tablica_ksiazki_strona.licencja;
tablica_ksiazki.nazwa_bazowego_spisu=tablica_ksiazki_strona.nazwa_bazowego_spisu;
tablica_ksiazki.tab_inne_spisy=tablica_ksiazki_strona.tab_inne_spisy;
tablica_ksiazki.dodatkowe_strony_woluminu=tablica_ksiazki_strona.dodatkowe_strony_woluminu;
tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=tablica_ksiazki_strona.adres_woluminu_bazowego_spisu_rzeczy;
tablica_ksiazki.referencja_do_nowej_formy_spisu={tablica_przestrzeni_strona,tablica_przestrzeni_ksiazki_strona,tablica_ksiazki_strona,};
return 1;
end;
end;
end
end;
end,function(tekst_rozwiniety_calego_artykulu_ref_spis,nazwa_przestrzeni_ref_spis,nazwa_przestrzeni_ksiazki_ref_spis,nazwa_ksiazki_ref_spis,nazwa_artykulu_ref_spis,tablica_analizy_obiektow_strony_dany_modul_ref_spis,tablica_danych_parametrow_szablonu_strony_ref_spis)
----
if((nazwa_przestrzeni==nazwa_przestrzeni_ref_spis)and(nazwa_przestrzeni_ksiazki==nazwa_przestrzeni_ksiazki_ref_spis)and(nazwa_ksiazki==nazwa_ksiazki_ref_spis)and(nazwa_artykulu==nazwa_artykulu_ref_spis))then
tekst_rozwiniety_calego_artykulu_ref=tekst_rozwiniety_calego_artykulu_ref_spis;
local parametry_modul=require("Module:Parametry");
tablica_analizy_obiektow_strony_dany_modul_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_analizy_obiektow_strony_dany_modul_ref_spis);
tablica_danych_parametrow_szablonu_strony_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_danych_parametrow_szablonu_strony_ref_spis);
end;
----
end);
local function __FUNKCJA_SPISU(tablica_ksiazki,czy_podac_adres)
tablica_ksiazki.spis=tabela_artykulow;
if(czy_artykul_korzystany)then
tablica_ksiazki.licencja=tabela_licencji_spisu_tresci;
end;
tablica_ksiazki.nazwa_bazowego_spisu=nazwa_glownego_spisu;
tablica_ksiazki.tab_inne_spisy=tab_inne_spisy;
tablica_ksiazki.dodatkowe_strony_woluminu=dodatkowe_artykuly;
tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=czy_podac_adres and adres_ksiazki_glownego_spisu_tresci or nil;
end;
if(tabela_artykulow==0)then
if(czy_artykul_korzystany)then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"korzystana strona główna nie istnieje");
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"dołączone strony główne nie istnieją",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
elseif(tabela_artykulow)then
if(parametry_modul.TypeTable(tabela_artykulow))then
if(adres_ksiazki_glownego_spisu_tresci)then
__FUNKCJA_SPISU(tablica_ksiazki,true);
local tablica_ksiazki_stara=tablica_ksiazki;
local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true);
local nazwa_przestrzeni=adres_ksiazki_glownego_spisu_tresci[1];
local nazwa_przestrzeni_ksiazki=adres_ksiazki_glownego_spisu_tresci[2];
local nazwa_ksiazki=adres_ksiazki_glownego_spisu_tresci[3];
if((kod_wyniku==1)or(kod_wyniku==2))then
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
if(not wartosc_wyniku)then
return wartosc_wyniku,true;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
local nazwa_artykulu=artykul;
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,true;
end;
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni ,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,};
__FUNKCJA_SPISU(tablica_ksiazki,false);
return nil,nil,artykul,kod_wyniku;
elseif((kod_wyniku==3)or(kod_wyniku==4))then
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,};
__FUNKCJA_SPISU(tablica_ksiazki,false);
return nil,nil,artykul,kod_wyniku;
end;
else
__FUNKCJA_SPISU(tablica_ksiazki,false);
end;
elseif(tabela_artykulow~=1)then
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(not wartosc_wyniku)then
return wartosc_wyniku,true;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,true;
end;
end;
else
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"))then
if(((self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=="")and(nazwa_artykulu~=""))or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=""))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych książek na ich stronach głównych",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
end;
end;
end;
end;
end;
----
local wartosc_wyniku,wynik_bledu,artykul_bazowy,kod_wyniku_bazowy=InneInformacjePrzebneDoAnalizowanejKsiazki();
if(wynik_bledu)then return wartosc_wyniku;end;
local kod_wyniku_przekierowan=kod_wyniku_bazowy;
----
--if((not tablica_przestrzeni)or(not tablica_przestrzeni_ksiazki)or(not tablica_ksiazki)or(not artykul_analizowany))then
-- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
--end;
----
if((tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy)and(kod_wyniku_bazowy))--[[and((kod_wyniku_bazowy==1)or(kod_wyniku_bazowy==2))]]then
----
nazwa_przestrzeni=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[1];
nazwa_przestrzeni_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[2];
nazwa_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[3];
nazwa_artykulu=artykul_bazowy;
----
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=tablica_ksiazki.referencja_do_nowej_formy_spisu[1],tablica_ksiazki.referencja_do_nowej_formy_spisu[2],tablica_ksiazki.referencja_do_nowej_formy_spisu[3];
end;
local tabela_artykulow=tablica_ksiazki.spis;
if(tabela_artykulow)then
local nazwa_glownego_spisu=tablica_ksiazki.nazwa_bazowego_spisu;
local tab_inne_spisy=tablica_ksiazki.tab_inne_spisy;
local dodatkowe_artykuly=tablica_ksiazki.dodatkowe_strony_woluminu
local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,false);
if(kod_wyniku)then
nazwa_artykulu=artykul;
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
kod_wyniku_przekierowan=kod_wyniku_przekierowan or kod_wyniku;
end;
local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local PrzekierownieAwaryjne=function()
if(not kod_wyniku_przekierowan)then
--local artykul2,kod_wyniku2=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true);
local techniczne_modul=require("Module:Techniczne");
local strona=techniczne_modul.PrzekierowanieDoStrony(nazwa_modulu);
if(strona)then
if(strona~=nazwa_modulu)then
----
local tabela_nazw={};
nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw);
nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw);
nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw) or nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw));
nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazwa);
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(not wartosc_wyniku)then
return wartosc_wyniku;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku;
end;
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
nazwa_modulu=strona;
else
return 0;
end;
end;
end;
end;
local wynik=PrzekierownieAwaryjne();
if(czy_artykul_korzystany)then
self.nazwa_modulu_biezaca=nazwa_modulu;
end;
if(wynik)then return wynik;end;
----
if(czy_artykul_korzystany)then
if((not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then
self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni;
self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu=nazwa_przestrzeni_ksiazki;
self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu=nazwa_ksiazki;
self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=nazwa_artykulu;
end;
end;
local nazwa_modulu_aktualna_czy_biezaca=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu) or nazwa_modulu;
-- przydzielanie tablicy
if(czy_artykul_korzystany)then
artykul_analizowany.artykul_biezacy=true;
tablica_ksiazki.ksiazka_analizowana=true;
end;
--koniec
--local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}");
if(not tablica_zmiennych)then tablica_zmiennych={};end;
if(not tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2)then tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={};end;
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
for _,element_w_tablicy_obiekt in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do
local CzyLink=element_w_tablicy_obiekt.CzyLink;
local CzyNum=element_w_tablicy_obiekt.CzyNum;
local wartosc=element_w_tablicy_obiekt[1];
tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum,};
if(czy_artykul_korzystany)then tablica_zmiennych.linkobiekt[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum;};end;
end;
local function StronaZbiorcza()
if(czy_artykul_korzystany)then
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end;
local wynik=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,tablica_ksiazki.spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
artykul_analizowany.strona_zbiorcza=(wynik and "tak" or "");
return wynik;
end;
return nil;
end;
local strona_zbiorcza=StronaZbiorcza();
local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
----
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony;
if((not tekst_rozwiniety_calego_artykulu_ref)or(not tablica_analizy_obiektow_strony_dany_modul_ref)or(not tablica_danych_parametrow_szablonu_strony_ref))then
tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))and true or nil),
nil)
else
tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=tekst_rozwiniety_calego_artykulu_ref,tablica_analizy_obiektow_strony_dany_modul_ref,tablica_danych_parametrow_szablonu_strony_ref;
end;
----
if(not czy_artykul_korzystany)then
if(not tekst_rozwiniety_calego_artykulu)then return 0;end;
end;
if(czy_artykul_korzystany)then
if(not tekst_rozwiniety_calego_artykulu)then
if(strona_zbiorcza)then
self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak";
end;
return nil;
end;
end;
local szablonowe_modul=require("Module:Szablonowe");
local parametry_modul=require("Module:Parametry");
if((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))then
local aktualna_nazwa_modulu=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwa_modulu_aktualna_czy_biezaca or nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu);
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(self,aktualna_nazwa_modulu);
if(tekst)then
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,aktualna_nazwa_modulu);
local tablica_danych_parametrow_szablonu_strony={};
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,aktualna_nazwa_modulu,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
if(stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
return true;
elseif(stronicowyparser_obiekty_modul.strona_start[nazwa_szablonu])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or "";
local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC";
if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return true;
end;
end);
if(wynik)then break;end;
end;
end;
end;
end;
local uzyskano_w_wyniku_parsowania_wywolanie_szablonu;
local analiza_stron_korzystanych_zbiorczych=nil;
local stronastart=nil;
----
local tablica_obiekty=stronicowyparser_obiekty_modul.obiekty;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty;
local format_elementowy_referencji_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_referencji_obiektowy;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu;
local szablony_wykorzystywane_przez_strony_zbiorcze=stronicowyparser_obiekty_modul.szablony_wykorzystywane_przez_strony_zbiorcze;
local format_elementowy_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_obiektowy;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu;
----
local strona_start=stronicowyparser_obiekty_modul.strona_start;
local strona_start_ze_spisem_rzeczy_strony=stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony;
local strona_start_inne=stronicowyparser_obiekty_modul.strona_start_inne;
local szablony_strony_zbiorczej=stronicowyparser_obiekty_modul.strona_zbiorcza;
----
local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe;
local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe;
local tab_szablony_stronicowe_formatowania_tekstu=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu;
local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego;
----
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
local tabela_elementow_strony_kodow={};
-- for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do
local function AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer)
if(czy_artykul_korzystany)then
if(tabela_parametrow_szablonu)then
if((not stronastart)and(self.tabela_listy_danych_analizy_ksiazki.formatowanie==nil))then
if(strona_start[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
stronastart=true;
local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or "";
local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC";
if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return;
elseif(strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
stronastart=true;
return;
elseif(strona_start_inne[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
stronastart=true;
return;
elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
analiza_stron_korzystanych_zbiorczych=true;
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not parametry_modul.CzyTak(nazwa_prestreni_nazw))and(not parametry_modul.CzyTak(nazwa_jednostki)))then
return;
end;
end;
elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
analiza_stron_korzystanych_zbiorczych=true;
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not parametry_modul.CzyTak(nazwa_przestrzeni))and(not parametry_modul.CzyTak(nazwa_jednostki)))then
return;
end;
end;
end;
end;
local plik=mw.ustring.match(nazwa_szablonu_wywolania,"^:");
if(plik==nil)then
if(tabela_parametrow_szablonu)then
if(not parametry_modul.CzyTak(tabela_parametrow_szablonu["bez automatu"]))then
local czy_wypowiedzenie=(nazwa_szablonu_wywolania=="Wypowiedzenie");
local czy_linkobiekt;
local czy_link;local czy_pobierz;
local czy_wypowiedzenie_z_parametrami;
local czy_linkobiekt_z_parametrami;
if(czy_wypowiedzenie)then
czy_linkobiekt=false;
czy_link=false;
czy_pobierz=false;
czy_wypowiedzenie_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["rodzaj"]);
else
czy_linkobiekt=(nazwa_szablonu_wywolania=="LinkObiekt");
if(czy_linkobiekt)then
czy_link=true;
czy_pobierz=false;
czy_linkobiekt_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["typ"]);
else
czy_link=mw.ustring.match(nazwa_szablonu_wywolania,"^Link");
czy_pobierz=(not czy_link) and mw.ustring.match(nazwa_szablonu_wywolania,"^Pobierz") or nil;
end;
end;
if((not czy_link)and(not czy_pobierz))then
local wartosc_elementu;local numer_uchwytu;
if(not czy_wypowiedzenie_z_parametrami) then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania];
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
else
local rodzaj=tabela_parametrow_szablonu["rodzaj"];
if(rodzaj)then
wartosc_elementu=format_elementowy_obiektowy[rodzaj] and rodzaj or nil;
if(wartosc_elementu)then
numer_uchwytu=tablica_obiekty[5];
end;
end;
end;
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
end;
elseif(czy_artykul_korzystany)then
if(czy_link)then
local wartosc_elementu;
if(not czy_linkobiekt_z_parametrami)then
wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania];
else
local typ=tabela_parametrow_szablonu["typ"];
if(typ)then
typ=format_elementowy_referencji_obiektowy[typ] and typ or nil;
if(typ)then
wartosc_elementu=mw.getContentLanguage():ucfirst(typ);
end;
end;
end;
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Link"..wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
else
local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu[nazwa_szablonu_wywolania];
if(wartosc_elementu)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
else
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
end;
return;
end;
end;
elseif(czy_pobierz)then
local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania];
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,true);
return;
end;
end;
end;
if(czy_wypowiedzenie)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Obiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artykul_korzystany,tablica_obiekty[5],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu[nazwa_szablonu_wywolania])then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka[nazwa_szablonu_wywolania];
local wartosc_elementu;local numer_uchwytu;
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,wartosc_elementu,lista_dwuelementowa,kod);
if(czy_artykul_korzystany)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return;
elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_tekstu[nazwa_szablonu_wywolania])then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania];
local wartosc_elementu;local numer_uchwytu;
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
if(lista_dwuelementowa)then
local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
local tekst=stronicowyparser_szablonytekstu_modul.ParametrTekstowySzablonuTekstu(tabela_parametrow_szablonu);
local bez_preprocess=stronicowyparser_szablonytekstu_modul.SzablonTekstuBezPreProcess(tabela_parametrow_szablonu);
local czy_bez_preprocess=parametry_modul.CzyTak(bez_preprocess);
if(tekst)then
local czy_szablon_wszystko=false;
tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul,
function(szablon,obiekt,kod)
if(czy_bez_preprocess)then return nil;end;
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
if(
(tab_szablony[nazwa_szablonu])
or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu])
or(tab_szablony_stronicowe_formatowania_tekstu[nazwa_szablonu])
or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu])
)then
if(not czy_artykul_korzystany)then
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=tabela_parametrow_szablonu["nazwa jednostki"] or (((nazwa_przestrzeni_ksiazki~="") and (nazwa_przestrzeni_ksiazki.."/") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or ""))
if(self)then
local czy_link_lub_pobierz=mw.ustring.match(nazwa_szablonu,"^Link") or mw.ustring.match(nazwa_szablonu,"^Pobierz");
if(czy_link_lub_pobierz)then
p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca);
else
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu);
end;
end;
end;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end;
return nil;
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- instrukcje warunkowe;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- wywołania ramek Lua w Scribunto
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- tagi szablonowe;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end);
czy_szablon_wszystko=czy_szablon_wszystko or true;
if(wynik)then return wynik;end;
elseif(obiekt=="ZMIENNA")then
czy_szablon_wszystko=czy_szablon_wszystko or true;
local zawartosc=mw.ustring.match(szablon,"^{{{(.*)}}}$");
if(zawartosc)then
zawartosc=mw.ustring.gsub(zawartosc,"|","{{!}}");
return "{{(((}}"..zawartosc.."{{)))}}";
end;
end;
end);
if((czy_szablon_wszystko)and(not bez_preprocess))then
local frame=mw.getCurrentFrame();
tekst=frame:preprocess(tekst);
end;
lista_dwuelementowa[2]=tekst;
end;
--local __metatabelka=getmetatable(tabela_parametrow_szablonu);
--if(__metatabelka)then setmetatable(tabela_parametrow_szablonu,nil);end;
stronicowyparser_szablonytekstu_modul.DodawanieDoBazyStronySzablonuTekstu(tablica_zmiennych,wartosc_elementu,lista_dwuelementowa,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,czy_artykul_korzystany);
end;
return;
elseif(czy_artykul_korzystany)then
if(czy_linkobiekt)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="LinkObiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,"Obiekt",nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
else
if(stronicowyparser_obiekty_modul.szablony_z_lokalnym_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
return;
elseif(stronicowyparser_obiekty_modul.bez_uchwytow_spis_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
local nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2] or "";
local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1] or "";
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "")
end;
end;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie);
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
else
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
end;
return;
else
local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
local nazwy_modul=require("Module:Nazwy");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or "";
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or "";
local nazwa_symulacyjnej_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
local uchwyt=nazwa_szablonu_wywolania..":"..nazwa_symulacyjnej_strony;
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=uchwyt;
end;
end;
if((stronicowyparser_obiekty_modul.szablony_kontenerowe[nazwa_szablonu_wywolania])
or(szablony_strony_zbiorczej[nazwa_szablonu_wywolania])
)then
if(szablony_wykorzystywane_przez_strony_zbiorcze[nazwa_szablonu_wywolania])then
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie);
else
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,nil,KtorySzablonMaZwracacKategorie);
end;
return;
elseif((strona_zbiorcza)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie);
return;
end;
end;
end;
end;
end;
end;
end;
end;
----
local function GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer)
stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego);
end;
local function IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu,tab_numer)
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul);
for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do
GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer);
end;
end;
IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu);
----
local tablica_danych_nazwy_artykulu=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu] or {};
tablica_danych_nazwy_artykulu.uchwyty_i_numeracje=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2;
----
local wiki_modul=require("Module:Wiki");
tablica_danych_nazwy_artykulu.link_wikidane={wiki_modul.KodyKlasStronyNaDanejWiki{["strona"]=nazwa_modulu_aktualna_czy_biezaca,["nagłówek"]=true,["aktywny"]=true,},};
----
if(czy_artykul_korzystany)then
if(analiza_stron_korzystanych_zbiorczych)then
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
tekst_rozwiniety_calego_artykulu=stronicowyparser_stronasubst_modul.LiczOperacjeStronZbiorczych(self,tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
end;
end;
local strona;
if(czy_artykul_korzystany)then strona="";else strona=nazwa_modulu;end;
----
if(czy_artykul_korzystany)then
local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
stronicowyparser_szablonytekstu_modul.UstawPobierzKorzystanie(tablica_zmiennych);
tekst_rozwiniety_calego_artykulu=stronicowyparser_szablonytekstu_modul.AktualizowanieSzablonowychTekstowychKompletowaniaInformacjiTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,IterowaniePoElementachTekstu) or tekst_rozwiniety_calego_artykulu;
end;
----
local function SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,tabela_elementow_strony_kodow,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca)
return function()
if(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane))
or((not czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)))then
----
local tablica_obiektow_strony_danych_kodow_specjalnych_modul=nil;
----
tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_danych_kodow_specjalnych_modul=szablonowe_modul:KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false);
----
local function KtorySzablonMaZwracacKategorieNaglowek(numeracja_aktualna,nazwa_szablonu)
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej");
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"powtórka nagłówek w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
end;
local function KtorySzablonMaZwracacKategorieTekst(numeracja_aktualna,nazwa_szablonu)
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej");
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"nagłowek w tekście rozdziału w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
end;
local function CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu()
return stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej");
end;
local nazwa_naglowka=stronicowyparser_obiekty_modul.nazwa_szablonu_wprowadzenia_tekstu;
local stronicowyparser_glownafunkcjazbieraniadanych_modul=require("Module:StronicowyParser/GłównaFunkcjaZbieraniaDanychStron");
local tablica_naglowka_obiekty=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_naglowka];
tablica_naglowka_obiekty.uchwyty_bez_numeracji={};
local toc=stronicowyparser_glownafunkcjazbieraniadanych_modul.SpisRzeczyWedlePodanegoTekstu(self,tekst_rozwiniety_calego_artykulu,strona, czy_artykul_korzystany,nil,tablica_naglowka_obiekty.uchwyty_bez_numeracji, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,{KtorySzablonMaZwracacKategorieNaglowek,KtorySzablonMaZwracacKategorieTekst,CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu,},nil,tabela_elementow_strony_kodow);
tablica_danych_nazwy_artykulu.TOC=toc;
return true;
end;
end;
end;
local czy_spis_function=SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,tabela_elementow_strony_kodow,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca);
local wynik=czy_spis_function();
if(not czy_artykul_korzystany)then
if(not wynik)then
tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=czy_spis_function;
end;
end;
StronaSubstFunkcja(tablica_danych_nazwy_artykulu,tablica_ksiazki.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(czy_artykul_korzystany)then
self.tabela_listy_danych_analizy_ksiazki.link_wikidane=tablica_danych_nazwy_artykulu.link_wikidane;
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykulu=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2;
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw[nazwa_przestrzeni_ksiazki];
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki[nazwa_ksiazki];
--self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron=tablica_zmiennych;
end;
if(not czy_artykul_korzystany)then
tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=tablica_zmiennych;
if(not self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista)then self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista={};end;
table.insert(self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista,tablica_danych_nazwy_artykulu);
else
local dane_zebrane_ze_stron_lista=self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista;
if(dane_zebrane_ze_stron_lista)then
for _,tablica_danych_nazwy_artykulu in ipairs(dane_zebrane_ze_stron_lista)do
tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=nil;
tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=nil;
end;
end;
tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane=nil;
end;
return self.tabela_listy_danych_analizy_ksiazki,tablica_zmiennych,true;
end;
return p;
fssr48kdrt7h12wizd2s94gdy6baa2f
551282
551278
2026-08-10T20:07:04Z
Persino
2851
551282
Scribunto
text/plain
local p={};
function p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,lista_dwuelementowa,kod)
if(lista_dwuelementowa)then
local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
if(not tab_obiekt)then
tabela_elementow_strony_kodow[nazwa_obiektu]={};
tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
end;
local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
if(not uchwyty_bez_numeracji)then
tab_obiekt.uchwyty_bez_numeracji={};
uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
end;
uchwyty_bez_numeracji[kod]=lista_dwuelementowa;
end;
end;
function p.WydobywanieUchwytuZeiBezNumeracji(self,tabela_elementow_strony_kodow,nazwa_obiektu,kod)
local tab_obiekt=tabela_elementow_strony_kodow[nazwa_obiektu];
if(not tab_obiekt)then return nil;end;
local uchwyty_bez_numeracji=tab_obiekt.uchwyty_bez_numeracji;
if(uchwyty_bez_numeracji)then
return uchwyty_bez_numeracji[kod];
end;
end;
function p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie)
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
kod_uchwytu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(kod_uchwytu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or kod_uchwytu;
local html_modul=require("Module:Html");
kod_uchwytu=html_modul.DecodeHtml(kod_uchwytu,true);
if(kod_uchwytu~="")then
KtorySzablonMaZwracacKategorie(kod_uchwytu);
local lista_dwuelementowa={};
lista_dwuelementowa[1]=kod_uchwytu;
local parametry_modul=require("Module:Parametry");
if((not tablica_zmiennych.sprawdzenie_dokonane_obiektu)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu])))then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu);
end;
tablica_zmiennych.sprawdzenie_dokonane_obiektu=true;
end;
if(tab_numer)then
tab_numer[nazwa_obiektu]=tab_numer[nazwa_obiektu]+1;
local numer=tab_numer[nazwa_obiektu];
table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],numer,lista_dwuelementowa);
else
table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa);
end;
return lista_dwuelementowa;
end;
end;
function p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie)
local kod_uchwytu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[numer_numeracji];
if(kod_uchwytu)then
local lista_dwuelementowa=p.RozpatrywanieElementuUchwytuNumeracji(self,kod_uchwytu,tab_numer,tablica_zmiennych, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return lista_dwuelementowa;
end;
end;
function p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then
if(nazwa_artykulu=="")then return;end;
local czy_element_wystepuje_w_tablicy=false;
local tablica_przestrzeni_wszystkiego=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron;
if(tablica_przestrzeni_wszystkiego)then
local tabela_przestrzeni_ksiazek=tablica_przestrzeni_wszystkiego[nazwa_przestrzeni];
if(tabela_przestrzeni_ksiazek)then
local tabela_ksiazek=tabela_przestrzeni_ksiazek[nazwa_przestrzeni_ksiazki]
if(tabela_ksiazek)then
local tab_ksiazki=tabela_ksiazek[nazwa_ksiazki];
if(tab_ksiazki)then
if(tab_ksiazki.spis)then
--czy_lista_niepusta=true;
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
for _,tab_value in ipairs(tab_ksiazki.spis)do
if(tab_value[2])then
for _,artykul_w_bazie_element in ipairs(tab_value[2])do
local artykul_w_bazie=artykul_w_bazie_element[1];
local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie);
artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie;
local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie);
if(artykul_bez_naglowka_w_bazie==nazwa_artykulu)then
czy_element_wystepuje_w_tablicy=true;
break;
end;
end;
end;
if(czy_element_wystepuje_w_tablicy)then break;end;
end;
end;
end;
end;
end;
end;
if(not czy_element_wystepuje_w_tablicy)then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu~=nazwa_przestrzeni_ksiazki)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu~=nazwa_ksiazki)
or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=nazwa_artykulu))then
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych stron",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisu treści do korzystanych stron"))then
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisu treści do korzystanych stron");
end;
end;
end;
end;
end;
function p.PusteParametryReferencji(self, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu)
local czy_ksiazka_z_tylko_odstepami_lub_pusty=(nazwa_ksiazki)and (nazwa_ksiazki=="") or nil;
local czy_artykul_z_tylko_odstepami_lub_pusty=(nazwa_artykulu)and (nazwa_artykulu=="") or nil;
local czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty=(uchwyt_obiektu)and (uchwyt_obiektu=="") or nil;
----
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
----
if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,1);
end;
end;
if(czy_artykul_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,2);
end;
end;
if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",nazwa_obiektu,3);
end;
end;
end;
function p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca,bezuchwytowe)
local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[bezuchwytowe and 1 or 2];
local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[bezuchwytowe and 2 or 3];
local parametry_modul=require("Module:Parametry");
local nazwy_modul=require("Module:Nazwy");
local html_modul=require("Module:Html");
if(nazwa_artykulu)then
nazwa_artykulu=html_modul.DecodeHtml(nazwa_artykulu,true);
local techniczne_modul=require("Module:Techniczne");
nazwa_artykulu=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=nazwa_artykulu,[2]="",};
end;
local nazwa_ksiazki;local nazwa_przestrzeni_ksiazki;local nazwa_przestrzeni;
if(pelna_nazwa_ksiazki)then
pelna_nazwa_ksiazki=html_modul.DecodeHtml(pelna_nazwa_ksiazki,true);
local techniczne_modul=require("Module:Techniczne");
pelna_nazwa_ksiazki=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=pelna_nazwa_ksiazki,[2]=nazwa_modulu_aktualna_czy_biezaca,};
----
local tabela_nazw={};
local ksiazkowe_modul=require("Module:Książkowe");
pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw);
nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](pelna_nazwa_ksiazki,tabela_nazw)));
--pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
end;
return nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu;
end;
function p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst,tab_nazwy)
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu;
if(not czy_inna_wartosc_tekst)then
nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,true);
else
nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=tab_nazwy[1],tab_nazwy[2],tab_nazwy[3],tab_nazwy[4];
end;
--local ksiazkowe_modul=require("Module:Książkowe");
--pelna_nazwa_ksiazki=pelna_nazwa_ksiazki or ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"]();
--nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"]();
if((nazwa_przestrzeni)or(nazwa_przestrzeni_ksiazki)or(nazwa_ksiazki)or(nazwa_artykulu))then
local tabela_nazw={};
local ksiazkowe_modul=require("Module:Książkowe");
local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw);
local nazwa_przestrzeni_ksiazki=nazwa_przestrzeni_ksiazki or ksiazkowe_modul["NazwaPrzestrzeniKsiążki"](nil,tabela_nazw);
local nazwa_ksiazki=nazwa_ksiazki or ksiazkowe_modul["NazwaTytułuKsiążki"](nil,tabela_nazw);
local nazwa_artykulu=nazwa_artykulu or ksiazkowe_modul["NazwaArtykułuKsiążki"](nil,tabela_nazw);
if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end;
local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false);
end;
end;
function p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,czy_szablon_pudelkowy_strony_zbiorczej,KtorySzablonMaZwracacKategorie)
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not nazwa_przestrzeni)and(not nazwa_jednostki))then return;end;
local parametry_modul=require("Module:Parametry");
if((nazwa_jednostki) and (nazwa_jednostki==""))then return;end;
local szablonowe_modul=require("Module:Szablonowe");
if((nazwa_jednostki and mw.ustring.match(nazwa_jednostki,szablonowe_modul.NormaWzoruKodowaniaTekstu()))
or (nazwa_przestrzeni and mw.ustring.match(nazwa_przestrzeni,szablonowe_modul.NormaWzoruKodowaniaTekstu()))
)then return;end;
local nazwy_modul=require("Module:Nazwy");
local ksiazkowe_modul=require("Module:Książkowe");
local html_modul=require("Module:Html");
if(nazwa_jednostki)then
nazwa_jednostki=html_modul.DecodeHtml(nazwa_jednostki,true);
end;
local tabela_nazw_art={};
local nazwa_jednostki=(nazwa_jednostki
and mw.ustring.gsub(nazwa_jednostki,"^([^#]*)#(.*)$","%1")
or nil
) or ksiazkowe_modul["NazwaArtykułu"](nil,tabela_nazw_art);
if(nazwa_przestrzeni)then
nazwa_przestrzeni=html_modul.DecodeHtml(nazwa_przestrzeni,true);
end;
local nazwa_przestrzeni=nazwa_przestrzeni or ksiazkowe_modul["NazwaPrzestrzeni"](nil,tabela_nazw_art);
local strona=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
local techniczne_modul=require("Module:Techniczne");
strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=self.nazwa_modulu_biezaca,};
--strona=ksiazkowe_modul["PEŁNANAZWASTRONY"](strona);
local tabela_nazw={};
local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw);
local nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw);
local nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and (nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw)) or (nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw)));
local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazw);
if(KtorySzablonMaZwracacKategorie)then KtorySzablonMaZwracacKategorie();end;
local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,nil,czy_szablon_pudelkowy_strony_zbiorczej);
end;
function p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca)
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca);
local nazwy_modul=require("Module:Nazwy");
local czy_inna_wartosc_tekst=true;
if((nazwa_artykulu)and(nazwa_ksiazki))then
--local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwy_modul["NazwaModułu"]("",nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
elseif((nazwa_artykulu)and(not nazwa_ksiazki))then
local ksiazkowe_modul=require("Module:Książkowe");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"]();
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or (ksiazkowe_modul["NazwaKsiążki"]()..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or ""));
----
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
elseif((not nazwa_artykulu)and(nazwa_ksiazki))then
local ksiazkowe_modul=require("Module:Książkowe");
local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or ksiazkowe_modul["NazwaPrzestrzeni"]();
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or ksiazkowe_modul["NazwaKsiążki"]();
----
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=nazwa_jednostki;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
else
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst,{nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,});
end;
end;
function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA_SPRAWDZANIE)
local pudelko_modul=require("Module:Pudełko");
if(((nazwa_przestrzeni)and(((nazwa_przestrzeni~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni)))or(nazwa_przestrzeni=="")))
and((nazwa_przestrzeni_ksiazki)and(((nazwa_przestrzeni_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_przestrzeni_ksiazki)))or(nazwa_przestrzeni_ksiazki=="")))
and((nazwa_ksiazki)and(nazwa_ksiazki~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_ksiazki)))
and((nazwa_artykulu)and(((nazwa_artykulu~="")and(not pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_artykulu)))or(nazwa_artykulu=="")))
)then
if(__FUNKCJA_SPRAWDZANIE)then
__FUNKCJA_SPRAWDZANIE(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
end;
else
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)
and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron");
end;
else
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron");
end;
end;
end;
end;
function p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz)
local linkobiekttab=tablica_zmiennych.linkobiekt[nazwa_obiektu];
local parametry_modul=require("Module:Parametry");
if((not tablica_zmiennych.sprawdzenie_dokonane_linku)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](linkobiekttab)))then
local parametry_modul=require("Module:Parametry");
local nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
local nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
local nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
local nazwa_artykulu=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu;
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki)))then
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
tablica_zmiennych.sprawdzenie_dokonane_linku=true;
end;
table.insert(linkobiekttab,uchwyt_obiektu);
if(czy_pobierz)then
if(not tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane)then
tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane={};
end;
table.insert(tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane,{{nazwa_obiektu,uchwyt_obiektu,},{obiekt,kod,},});
end;
end;
function p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz)
p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,function()
local parametry_modul=require("Module:Parametry");
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu))then
local tablica_zmiennych2={};
tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2={}
local tabela_listy_danych_analizy_ksiazki0,tablica_zmiennych2,czy_inna=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2);
if(tabela_listy_danych_analizy_ksiazki0)then
if((not czy_inna)or(not tablica_zmiennych2))then return;end;
local stronicowyparser_szablony_tekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
local JuzPoliczone=function()
if(czy_pobierz)then
stronicowyparser_szablony_tekstu_modul.UstawianiePobierz(tablica_zmiennych,tablica_zmiennych2,obiekt,kod,nazwa_obiektu,uchwyt_obiektu,false);
end;
if(not tablica_zmiennych2.dane_juz_policzone)then tablica_zmiennych2.dane_juz_policzone={};end;
local tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu];
if(not tab_nazwa_obiektu)then
tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu]={};
tab_nazwa_obiektu=tablica_zmiennych2.dane_juz_policzone[nazwa_obiektu];
end;
local tab_uchwyt=tab_nazwa_obiektu[uchwyt_obiektu];
if(tab_uchwyt)then
return true;
end;
tab_nazwa_obiektu[uchwyt_obiektu]=true;
return false;
end;
if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then
local czy_policzone=JuzPoliczone();
if(czy_policzone)then
return;
end;
else
JuzPoliczone();
end;
stronicowyparser_szablony_tekstu_modul.DodawanieDoBazySzablonuTekstuStronyKorzystanejElementyInnejStrony(tablica_zmiennych,tablica_zmiennych2);
p.SprawdzanieCzyJestTakiElementSpisuRzeczyWoluminowychPozycji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
local czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2=tablica_zmiennych2.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu];
local CzyLink=czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2.CzyLink;
local ile_razy=0;
if(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2)then
for _, parametry_obiektu in ipairs(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2) do
if(parametry_obiektu[1]==uchwyt_obiektu)then
ile_razy=ile_razy+1;
if(ile_razy>1)then break;end;
end;
end;
end
if(ile_razy~=1)then
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",(CzyLink and "Link" or "Pobierz")..nazwa_obiektu);
end;
p.PusteParametryReferencji(self,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
else
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"błąd wewnętrzny modułu lua stronicowego parsera");
end;
end;
else
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
end);
end;
function p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,czy_pobierz)
local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1];
local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca);
----
local parametry_modul=require("Module:Parametry");
if(parametry_modul.CzyTak(uchwyt_obiektu))then
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
uchwyt_obiektu=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu(uchwyt_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,true) or uchwyt_obiektu;
local html_modul=require("Module:Html");
uchwyt_obiektu=html_modul.DecodeHtml(uchwyt_obiektu,true);
end;
----
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
----
if(parametry_modul.CzyTak(uchwyt_obiektu))then
nazwa_artykulu=(nazwa_artykulu or (nazwa_ksiazki and "" or nil));
if(nazwa_artykulu)then
if(nazwa_artykulu~="")then
if(not nazwa_ksiazki)then
nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
elseif(nazwa_ksiazki=="")then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
return;
end;
elseif((nazwa_ksiazki)and(nazwa_ksiazki~=""))then
nazwa_artykulu="";
elseif((nazwa_ksiazki)and(nazwa_ksiazki==""))then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
return;
else
nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
nazwa_przestrzeni_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
end;
if((nazwa_przestrzeni~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)
or(nazwa_przestrzeni_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)
or(nazwa_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)
or(nazwa_artykulu~=self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then
p.LinkowanieInnychStron(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,czy_pobierz);
else
p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz);
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
else
p.LinkowanieFinalizowaniePrac(self,obiekt,kod,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul,czy_pobierz)
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then
p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,nil);
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
elseif(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu))then
p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak uchwytu",nazwa_obiektu);
end;
KtorySzablonMaZwracacKategorie(uchwyt_obiektu);
end;
function p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, czy_artykul_korzystany,tablica_zmiennych,czy_szablon_pudelkowy_strony_zbiorczej)
local function __FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni])then self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni]={};end;
local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
if(not tablica_przestrzeni[nazwa_przestrzeni_ksiazki])then tablica_przestrzeni[nazwa_przestrzeni_ksiazki]={};end;
local tablica_przestrzeni_ksiazki=tablica_przestrzeni[nazwa_przestrzeni_ksiazki];
if(not tablica_przestrzeni_ksiazki[nazwa_ksiazki])then tablica_przestrzeni_ksiazki[nazwa_ksiazki]={};end;
local tablica_ksiazki=tablica_przestrzeni_ksiazki[nazwa_ksiazki];
if(not tablica_ksiazki.lista_podstron_woluminu)then tablica_ksiazki.lista_podstron_woluminu={};end;
if(nazwa_artykulu)then
if(not tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu])then tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu]={};end;
local artykul_analizowany=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu];
return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany;
else
return tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki;
end;
end;
local function __FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if(not czy_artykul_korzystany)then
if(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu and self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu)then
if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu==nazwa_przestrzeni_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu==nazwa_artykulu))then
return 0,nil,nil,nil,nil,nil,self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron,false;
else
if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=true;
end;
end;
else
return nil;
end;
end;
if(self.tabela_listy_danych_analizy_ksiazki)then
if(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron)then
local tabela_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
if(tabela_przestrzeni)then
local tabela_przestrzeni_ksiazki=tabela_przestrzeni[nazwa_przestrzeni_ksiazki];
if(tabela_przestrzeni_ksiazki)then
local tabela_ksiazka=tabela_przestrzeni_ksiazki[nazwa_ksiazki];
if(tabela_ksiazka)then
local lista_artykolow=tabela_ksiazka.lista_podstron_woluminu;
if(lista_artykolow)then
local tabela_artykul=lista_artykolow[nazwa_artykulu];
if(tabela_artykul)then
local dane_zebrane_ze_stron=tabela_artykul.dane_zebrane_ze_stron;
----
if(not czy_artykul_korzystany)then
if(tabela_artykul.TOCSPIS_FUNCTION)then
local wynik=tabela_artykul.TOCSPIS_FUNCTION();
if(wynik)then
tabela_artykul.TOCSPIS_FUNCTION=nil;
end;
end;
end;
return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,true;
end;
end;
end;
end;
end;
else
return nil;
end;
else
return nil;
end;
return true;
end;
local nazwy_modul=require("Module:Nazwy");
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni,dane_zebrane_ze_stron,czy_inna=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local function StronaSubstFunkcja(tabela_artykul,spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu)
if((czy_szablon_pudelkowy_strony_zbiorczej)and(not czy_artykul_korzystany)and(tabela_artykul)and(not tabela_artykul.strona_zbiorcza))then
--local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
local TakFun=function(frame) return "tak";end;local NieFun=function(frame) return "";end;
tabela_artykul.strona_zbiorcza=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
end;
if(not wartosc_wyniku)then
return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,dane_zebrane_ze_stron,czy_inna;
end;
----
local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
if((nazwa_przestrzeni~=nazwy_np_modul.Main)
and(nazwa_przestrzeni~=nazwy_np_modul.Wikijunior)
and((nazwa_przestrzeni~=nazwy_np_modul.User)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$")))
and((nazwa_przestrzeni~=nazwy_np_modul.Wikibooks)or(not mw.ustring.match(nazwa_przestrzeni_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$")))
)then
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
----
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local parametry_modul=require("Module:Parametry");
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
----
local tekst_rozwiniety_calego_artykulu_ref=nil;
local tablica_analizy_obiektow_strony_dany_modul_ref=nil;
local tablica_danych_parametrow_szablonu_strony_ref=nil;
----
local function InneInformacjePrzebneDoAnalizowanejKsiazki()
if(not (stronicowyparser_problemy_modul.CzyJestTakiElementTabeliProblemu(self,"strony poza zakresem obsługiwanym",nil,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki,nazwa_ksiazki)))then
if((nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki))then
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"])then self.tabela_listy_danych_analizy_ksiazki["CzyArtykułKsiążki"]="tak";end;
end;
local czy_ksiazka_istnieje_w_tablicy=((tablica_ksiazki)and(tablica_ksiazki.czy_spis_analizowano))and true or false;
if(not czy_ksiazka_istnieje_w_tablicy)then
tablica_ksiazki.czy_spis_analizowano=true;
local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści");
local nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp;
local tabela_artykulow,tabela_licencji_spisu_tresci,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci=stronicowyparser_spistresci_modul.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,function(nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona)
local tablica_przestrzeni_strona=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni_strona];
if(tablica_przestrzeni_strona)then
local tablica_przestrzeni_ksiazki_strona=tablica_przestrzeni_strona[nazwa_przestrzeni_ksiazki_strona];
if(tablica_przestrzeni_ksiazki_strona)then
local tablica_ksiazki_strona=tablica_przestrzeni_ksiazki_strona[nazwa_ksiazki_strona];
if(tablica_ksiazki_strona)then
if(tablica_ksiazki_strona.spis)then
nazwa_przestrzeni_strona_temp,nazwa_przestrzeni_ksiazki_strona_temp,nazwa_ksiazki_strona_temp=nazwa_przestrzeni_strona,nazwa_przestrzeni_ksiazki_strona,nazwa_ksiazki_strona;
tablica_ksiazki.spis=tablica_ksiazki_strona.spis;
tablica_ksiazki.licencja=tablica_ksiazki_strona.licencja;
tablica_ksiazki.nazwa_bazowego_spisu=tablica_ksiazki_strona.nazwa_bazowego_spisu;
tablica_ksiazki.tab_inne_spisy=tablica_ksiazki_strona.tab_inne_spisy;
tablica_ksiazki.dodatkowe_strony_woluminu=tablica_ksiazki_strona.dodatkowe_strony_woluminu;
tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=tablica_ksiazki_strona.adres_woluminu_bazowego_spisu_rzeczy;
tablica_ksiazki.referencja_do_nowej_formy_spisu={tablica_przestrzeni_strona,tablica_przestrzeni_ksiazki_strona,tablica_ksiazki_strona,};
return 1;
end;
end;
end
end;
end,function(tekst_rozwiniety_calego_artykulu_ref_spis,nazwa_przestrzeni_ref_spis,nazwa_przestrzeni_ksiazki_ref_spis,nazwa_ksiazki_ref_spis,nazwa_artykulu_ref_spis,tablica_analizy_obiektow_strony_dany_modul_ref_spis,tablica_danych_parametrow_szablonu_strony_ref_spis)
----
if((nazwa_przestrzeni==nazwa_przestrzeni_ref_spis)and(nazwa_przestrzeni_ksiazki==nazwa_przestrzeni_ksiazki_ref_spis)and(nazwa_ksiazki==nazwa_ksiazki_ref_spis)and(nazwa_artykulu==nazwa_artykulu_ref_spis))then
tekst_rozwiniety_calego_artykulu_ref=tekst_rozwiniety_calego_artykulu_ref_spis;
local parametry_modul=require("Module:Parametry");
tablica_analizy_obiektow_strony_dany_modul_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_analizy_obiektow_strony_dany_modul_ref_spis);
tablica_danych_parametrow_szablonu_strony_ref=parametry_modul["KopiujRekurencyjnieTabelęElementów"](tablica_danych_parametrow_szablonu_strony_ref_spis);
end;
----
end);
local function __FUNKCJA_SPISU(tablica_ksiazki,czy_podac_adres)
tablica_ksiazki.spis=tabela_artykulow;
if(czy_artykul_korzystany)then
tablica_ksiazki.licencja=tabela_licencji_spisu_tresci;
end;
tablica_ksiazki.nazwa_bazowego_spisu=nazwa_glownego_spisu;
tablica_ksiazki.tab_inne_spisy=tab_inne_spisy;
tablica_ksiazki.dodatkowe_strony_woluminu=dodatkowe_artykuly;
tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy=czy_podac_adres and adres_ksiazki_glownego_spisu_tresci or nil;
end;
if(tabela_artykulow==0)then
if(czy_artykul_korzystany)then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"korzystana strona główna nie istnieje");
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"dołączone strony główne nie istnieją",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
elseif(tabela_artykulow)then
if(parametry_modul.TypeTable(tabela_artykulow))then
if(adres_ksiazki_glownego_spisu_tresci)then
__FUNKCJA_SPISU(tablica_ksiazki,true);
local tablica_ksiazki_stara=tablica_ksiazki;
local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true);
local nazwa_przestrzeni=adres_ksiazki_glownego_spisu_tresci[1];
local nazwa_przestrzeni_ksiazki=adres_ksiazki_glownego_spisu_tresci[2];
local nazwa_ksiazki=adres_ksiazki_glownego_spisu_tresci[3];
if((kod_wyniku==1)or(kod_wyniku==2))then
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
if(not wartosc_wyniku)then
return wartosc_wyniku,true;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
local nazwa_artykulu=artykul;
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,true;
end;
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni ,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,};
__FUNKCJA_SPISU(tablica_ksiazki,false);
return nil,nil,artykul,kod_wyniku;
elseif((kod_wyniku==3)or(kod_wyniku==4))then
local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,artykul);
tablica_ksiazki_stara.referencja_do_nowej_formy_spisu={tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,};
__FUNKCJA_SPISU(tablica_ksiazki,false);
return nil,nil,artykul,kod_wyniku;
end;
else
__FUNKCJA_SPISU(tablica_ksiazki,false);
end;
elseif(tabela_artykulow~=1)then
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(not wartosc_wyniku)then
return wartosc_wyniku,true;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku,true;
end;
end;
else
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych"))then
if(((self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=="")and(nazwa_artykulu~=""))or(self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu~=""))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"brak spisów treści do korzystanych książek na ich stronach głównych");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"brak spisów treści do dołączonych książek na ich stronach głównych",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
end;
end;
end;
end;
end;
end;
----
local wartosc_wyniku,wynik_bledu,artykul_bazowy,kod_wyniku_bazowy=InneInformacjePrzebneDoAnalizowanejKsiazki();
if(wynik_bledu)then return wartosc_wyniku;end;
local kod_wyniku_przekierowan=kod_wyniku_bazowy;
----
--if((not tablica_przestrzeni)or(not tablica_przestrzeni_ksiazki)or(not tablica_ksiazki)or(not artykul_analizowany))then
-- tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
--end;
----
if((tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy)and(kod_wyniku_bazowy))--[[and((kod_wyniku_bazowy==1)or(kod_wyniku_bazowy==2))]]then
----
nazwa_przestrzeni=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[1];
nazwa_przestrzeni_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[2];
nazwa_ksiazki=tablica_ksiazki.adres_woluminu_bazowego_spisu_rzeczy[3];
nazwa_artykulu=artykul_bazowy;
----
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=tablica_ksiazki.referencja_do_nowej_formy_spisu[1],tablica_ksiazki.referencja_do_nowej_formy_spisu[2],tablica_ksiazki.referencja_do_nowej_formy_spisu[3];
end;
local tabela_artykulow=tablica_ksiazki.spis;
if(tabela_artykulow)then
local nazwa_glownego_spisu=tablica_ksiazki.nazwa_bazowego_spisu;
local tab_inne_spisy=tablica_ksiazki.tab_inne_spisy;
local dodatkowe_artykuly=tablica_ksiazki.dodatkowe_strony_woluminu
local artykul,kod_wyniku=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,false);
if(kod_wyniku)then
nazwa_artykulu=artykul;
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
end;
kod_wyniku_przekierowan=kod_wyniku_przekierowan or kod_wyniku;
end;
local nazwa_modulu=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
local PrzekierownieAwaryjne=function()
if(not kod_wyniku_przekierowan)then
--local artykul2,kod_wyniku2=stronicowyparser_potrzebne_modul.OdpowiednikNaPrzemianArtykularnychStronWoluminu(tabela_artykulow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,true);
local techniczne_modul=require("Module:Techniczne");
local strona=techniczne_modul.PrzekierowanieDoStrony(nazwa_modulu);
if(strona)then
if(strona~=nazwa_modulu)then
----
local tabela_nazw={};
nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona,tabela_nazw);
nazwa_przestrzeni_ksiazki=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona,tabela_nazw);
nazwa_ksiazki=((nazwa_przestrzeni_ksiazki~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona,tabela_nazw) or nazwy_modul["NAZWAKSIĄŻKI"](strona,tabela_nazw));
nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona,tabela_nazwa);
local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA_POBIERANIE(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(not wartosc_wyniku)then
return wartosc_wyniku;
elseif((wartosc_wyniku==0)and(tabela_artykul))then
StronaSubstFunkcja(tabela_artykul,tabela_ksiazka.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
return wartosc_wyniku;
end;
tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki,artykul_analizowany=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
nazwa_modulu=strona;
else
return 0;
end;
end;
end;
end;
local wynik=PrzekierownieAwaryjne();
if(czy_artykul_korzystany)then
self.nazwa_modulu_biezaca=nazwa_modulu;
end;
if(wynik)then return wynik;end;
----
if(czy_artykul_korzystany)then
if((not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu))then
self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni;
self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu=nazwa_przestrzeni_ksiazki;
self.tabela_listy_danych_analizy_ksiazki.nazwa_woluminu=nazwa_ksiazki;
self.tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu=nazwa_artykulu;
end;
end;
local nazwa_modulu_aktualna_czy_biezaca=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu) or nazwa_modulu;
-- przydzielanie tablicy
if(czy_artykul_korzystany)then
artykul_analizowany.artykul_biezacy=true;
tablica_ksiazki.ksiazka_analizowana=true;
end;
--koniec
--local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}");
if(not tablica_zmiennych)then tablica_zmiennych={};end;
if(not tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2)then tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={};end;
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
for _,element_w_tablicy_obiekt in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do
local CzyLink=element_w_tablicy_obiekt.CzyLink;
local CzyNum=element_w_tablicy_obiekt.CzyNum;
local wartosc=element_w_tablicy_obiekt[1];
tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum,};
if(czy_artykul_korzystany)then tablica_zmiennych.linkobiekt[wartosc]={CzyLink=CzyLink,CzyNum=CzyNum;};end;
end;
local function StronaZbiorcza()
if(czy_artykul_korzystany)then
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end;
local wynik=stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,tablica_ksiazki.spis,nil,TakFun,NieFun,nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
artykul_analizowany.strona_zbiorcza=(wynik and "tak" or "");
return wynik;
end;
return nil;
end;
local strona_zbiorcza=StronaZbiorcza();
local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"");
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
----
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony;
if((not tekst_rozwiniety_calego_artykulu_ref)or(not tablica_analizy_obiektow_strony_dany_modul_ref)or(not tablica_danych_parametrow_szablonu_strony_ref))then
tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))and true or nil),
nil)
else
tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=tekst_rozwiniety_calego_artykulu_ref,tablica_analizy_obiektow_strony_dany_modul_ref,tablica_danych_parametrow_szablonu_strony_ref;
end;
----
if(not czy_artykul_korzystany)then
if(not tekst_rozwiniety_calego_artykulu)then return 0;end;
end;
if(czy_artykul_korzystany)then
if(not tekst_rozwiniety_calego_artykulu)then
if(strona_zbiorcza)then
self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak";
end;
return nil;
end;
end;
local szablonowe_modul=require("Module:Szablonowe");
local parametry_modul=require("Module:Parametry");
if((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.inna_strona_aktualna_niz_biezaca))then
local aktualna_nazwa_modulu=self.tabela_listy_danych_analizy_ksiazki.alternatywna and nazwa_modulu_aktualna_czy_biezaca or nazwy_modul["NazwaModułu"](self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_przestrzeni_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_ksiazki,self.tabela_listy_danych_analizy_ksiazki.aktualna_nazwa_artykulu);
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(self,aktualna_nazwa_modulu);
if(tekst)then
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,aktualna_nazwa_modulu);
local tablica_danych_parametrow_szablonu_strony={};
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,aktualna_nazwa_modulu,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
if(stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
return true;
elseif(stronicowyparser_obiekty_modul.strona_start[nazwa_szablonu])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or "";
local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC";
if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return true;
end;
end);
if(wynik)then break;end;
end;
end;
end;
end;
local uzyskano_w_wyniku_parsowania_wywolanie_szablonu;
local analiza_stron_korzystanych_zbiorczych=nil;
local stronastart=nil;
----
local tablica_obiekty=stronicowyparser_obiekty_modul.obiekty;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty;
local format_elementowy_referencji_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_referencji_obiektowy;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu;
local szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu;
local szablony_wykorzystywane_przez_strony_zbiorcze=stronicowyparser_obiekty_modul.szablony_wykorzystywane_przez_strony_zbiorcze;
local format_elementowy_obiektowy=stronicowyparser_obiekty_modul.format_elementowy_obiektowy;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.numerowane_obiekty;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_napisu_wprowadzenia_tekstu;
local szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu=stronicowyparser_obiekty_modul.szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane.nienumerowane_obiekty_tekstu;
----
local strona_start=stronicowyparser_obiekty_modul.strona_start;
local strona_start_ze_spisem_rzeczy_strony=stronicowyparser_obiekty_modul.strona_start_ze_spisem_rzeczy_strony;
local strona_start_inne=stronicowyparser_obiekty_modul.strona_start_inne;
local szablony_strony_zbiorczej=stronicowyparser_obiekty_modul.strona_zbiorcza;
----
local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe;
local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe;
local tab_szablony_stronicowe_formatowania_tekstu=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu;
local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego;
----
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
local tabela_elementow_strony_kodow={};
-- for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do
local function AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer)
if(czy_artykul_korzystany)then
if(tabela_parametrow_szablonu)then
if((not stronastart)and(self.tabela_listy_danych_analizy_ksiazki.formatowanie==nil))then
if(strona_start[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
stronastart=true;
local boczne_menu=tabela_parametrow_szablonu["boczne menu"] or "";
local spis_tresci=tabela_parametrow_szablonu["spis treści"] or "TOC";
if((parametry_modul.CzyTak(boczne_menu))or(parametry_modul.CzyTak(spis_tresci)))then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return;
elseif(strona_start_ze_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
stronastart=true;
return;
elseif(strona_start_inne[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.strona_ze_szablonem_strona_start="tak";
self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
stronastart=true;
return;
elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
analiza_stron_korzystanych_zbiorczych=true;
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not parametry_modul.CzyTak(nazwa_prestreni_nazw))and(not parametry_modul.CzyTak(nazwa_jednostki)))then
return;
end;
end;
elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
analiza_stron_korzystanych_zbiorczych=true;
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"];
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"];
if((not parametry_modul.CzyTak(nazwa_przestrzeni))and(not parametry_modul.CzyTak(nazwa_jednostki)))then
return;
end;
end;
end;
end;
local plik=mw.ustring.match(nazwa_szablonu_wywolania,"^:");
if(plik==nil)then
if(tabela_parametrow_szablonu)then
if(not parametry_modul.CzyTak(tabela_parametrow_szablonu["bez automatu"]))then
local czy_wypowiedzenie=(nazwa_szablonu_wywolania=="Wypowiedzenie");
local czy_linkobiekt;
local czy_link;local czy_pobierz;
local czy_wypowiedzenie_z_parametrami;
local czy_linkobiekt_z_parametrami;
if(czy_wypowiedzenie)then
czy_linkobiekt=false;
czy_link=false;
czy_pobierz=false;
czy_wypowiedzenie_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["rodzaj"]);
else
czy_linkobiekt=(nazwa_szablonu_wywolania=="LinkObiekt");
if(czy_linkobiekt)then
czy_link=true;
czy_pobierz=false;
czy_linkobiekt_z_parametrami=parametry_modul.CzyTak(tabela_parametrow_szablonu["typ"]);
else
czy_link=mw.ustring.match(nazwa_szablonu_wywolania,"^Link");
czy_pobierz=(not czy_link) and mw.ustring.match(nazwa_szablonu_wywolania,"^Pobierz") or nil;
end;
end;
if((not czy_link)and(not czy_pobierz))then
local wartosc_elementu;local numer_uchwytu;
if(not czy_wypowiedzenie_z_parametrami) then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania];
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
else
local rodzaj=tabela_parametrow_szablonu["rodzaj"];
if(rodzaj)then
wartosc_elementu=format_elementowy_obiektowy[rodzaj] and rodzaj or nil;
if(wartosc_elementu)then
numer_uchwytu=tablica_obiekty[5];
end;
end;
end;
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
end;
elseif(czy_artykul_korzystany)then
if(czy_link)then
local wartosc_elementu;
if(not czy_linkobiekt_z_parametrami)then
wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_numerowane_obiekty[nazwa_szablonu_wywolania];
else
local typ=tabela_parametrow_szablonu["typ"];
if(typ)then
typ=format_elementowy_referencji_obiektowy[typ] and typ or nil;
if(typ)then
wartosc_elementu=mw.getContentLanguage():ucfirst(typ);
end;
end;
end;
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Link"..wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
else
local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_napisu_wprowadzenia_tekstu[nazwa_szablonu_wywolania];
if(wartosc_elementu)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
else
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
end;
return;
end;
end;
elseif(czy_pobierz)then
local wartosc_elementu=szablony_linkowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania];
if(wartosc_elementu)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,wartosc_elementu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie,true);
return;
end;
end;
end;
if(czy_wypowiedzenie)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Obiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artykul_korzystany,tablica_obiekty[5],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu[nazwa_szablonu_wywolania])then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_naglowka[nazwa_szablonu_wywolania];
local wartosc_elementu;local numer_uchwytu;
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
p.UchwytyZeiBezNumeracji(self,tabela_elementow_strony_kodow,wartosc_elementu,lista_dwuelementowa,kod);
if(czy_artykul_korzystany)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
end;
return;
elseif(stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_tekstu[nazwa_szablonu_wywolania])then
local tab_wartosc_elementu=szablony_obiektowe_z_uchwytami_numerowane_i_nienumerowane_nienumerowane_obiekty_tekstu[nazwa_szablonu_wywolania];
local wartosc_elementu;local numer_uchwytu;
if(tab_wartosc_elementu)then
wartosc_elementu=tab_wartosc_elementu[1];
numer_uchwytu=tab_wartosc_elementu[2];
end;
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(czy_artykul_korzystany)then
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
if(uchwyt_obiektu and (uchwyt_obiektu~=""))then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
end;
end;
local lista_dwuelementowa=p.RozpatrywanieSzablonuObiektuDoNumeracji(self,tabela_parametrow_szablonu,tablica_zmiennych, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artykul_korzystany,numer_uchwytu--[[elementy_w_tablicy_obiekty[5]],tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
if(lista_dwuelementowa)then
local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
local tekst=stronicowyparser_szablonytekstu_modul.ParametrTekstowySzablonuTekstu(tabela_parametrow_szablonu);
local bez_preprocess=stronicowyparser_szablonytekstu_modul.SzablonTekstuBezPreProcess(tabela_parametrow_szablonu);
local czy_bez_preprocess=parametry_modul.CzyTak(bez_preprocess);
if(tekst)then
local czy_szablon_wszystko=false;
tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul,
function(szablon,obiekt,kod)
if(czy_bez_preprocess)then return nil;end;
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
if(
(tab_szablony[nazwa_szablonu])
or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu])
or(tab_szablony_stronicowe_formatowania_tekstu[nazwa_szablonu])
or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu])
)then
if(not czy_artykul_korzystany)then
tabela_parametrow_szablonu["nazwa przestrzeni nazw"]=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or nazwa_przestrzeni;
tabela_parametrow_szablonu["nazwa jednostki"]=tabela_parametrow_szablonu["nazwa jednostki"] or (((nazwa_przestrzeni_ksiazki~="") and (nazwa_przestrzeni_ksiazki.."/") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or ""))
if(self)then
local czy_link_lub_pobierz=mw.ustring.match(nazwa_szablonu,"^Link") or mw.ustring.match(nazwa_szablonu,"^Pobierz");
if(czy_link_lub_pobierz)then
p.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna_czy_biezaca);
else
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu);
end;
end;
end;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end;
return nil;
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- instrukcje warunkowe;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- wywołania ramek Lua w Scribunto
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end,
function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod)
---- tagi szablonowe;
return szablonowe_modul.KodSymbolicznySzablonu(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow,true);
end);
czy_szablon_wszystko=czy_szablon_wszystko or true;
if(wynik)then return wynik;end;
elseif(obiekt=="ZMIENNA")then
czy_szablon_wszystko=czy_szablon_wszystko or true;
local zawartosc=mw.ustring.match(szablon,"^{{{(.*)}}}$");
if(zawartosc)then
zawartosc=mw.ustring.gsub(zawartosc,"|","{{!}}");
return "{{(((}}"..zawartosc.."{{)))}}";
end;
end;
end);
if((czy_szablon_wszystko)and(not bez_preprocess))then
local frame=mw.getCurrentFrame();
tekst=frame:preprocess(tekst);
end;
lista_dwuelementowa[2]=tekst;
end;
--local __metatabelka=getmetatable(tabela_parametrow_szablonu);
--if(__metatabelka)then setmetatable(tabela_parametrow_szablonu,nil);end;
stronicowyparser_szablonytekstu_modul.DodawanieDoBazyStronySzablonuTekstu(tablica_zmiennych,wartosc_elementu,lista_dwuelementowa,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,czy_artykul_korzystany);
end;
return;
elseif(czy_artykul_korzystany)then
if(czy_linkobiekt)then
local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="LinkObiekt:"..((uchwyt_obiektu)and uchwyt_obiektu or "");
end;
end;
p.GeneralneLinkowanie(self,obiekt,kod,tablica_zmiennych,tabela_parametrow_szablonu,"Obiekt",nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie);
return;
else
if(stronicowyparser_obiekty_modul.szablony_z_lokalnym_spisem_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
return;
elseif(stronicowyparser_obiekty_modul.bez_uchwytow_spis_rzeczy_strony[nazwa_szablonu_wywolania])then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
local nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2] or "";
local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1] or "";
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu_wywolania..":"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "")
end;
end;
p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie);
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
else
self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
end;
return;
else
local function KtorySzablonMaZwracacKategorie(uchwyt,__FUNKCJA_KATEGORIE)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
local nazwy_modul=require("Module:Nazwy");
local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or "";
local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or "";
local nazwa_symulacyjnej_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
local uchwyt=nazwa_szablonu_wywolania..":"..nazwa_symulacyjnej_strony;
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=uchwyt;
end;
end;
if((stronicowyparser_obiekty_modul.szablony_kontenerowe[nazwa_szablonu_wywolania])
or(szablony_strony_zbiorczej[nazwa_szablonu_wywolania])
)then
if(szablony_wykorzystywane_przez_strony_zbiorcze[nazwa_szablonu_wywolania])then
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie);
else
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,nil,KtorySzablonMaZwracacKategorie);
end;
return;
elseif((strona_zbiorcza)and(szablony_strony_zbiorczej[nazwa_szablonu_wywolania]))then
p.ZbieranieKontenerowychInformacji(self,tabela_parametrow_szablonu,true,KtorySzablonMaZwracacKategorie);
return;
end;
end;
end;
end;
end;
end;
end;
end;
----
local function GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer)
stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowaOrazNazwowaStronicowegoIteratoraSzablonowego);
end;
local function IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu,tab_numer)
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul);
for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do
GeneralnaAnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,tab_numer);
end;
end;
IterowaniePoElementachTekstu(tekst_rozwiniety_calego_artykulu);
----
local tablica_danych_nazwy_artykulu=tablica_ksiazki.lista_podstron_woluminu[nazwa_artykulu] or {};
tablica_danych_nazwy_artykulu.uchwyty_i_numeracje=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2;
----
local wiki_modul=require("Module:Wiki");
tablica_danych_nazwy_artykulu.link_wikidane={wiki_modul.KodyKlasStronyNaDanejWiki{["strona"]=nazwa_modulu_aktualna_czy_biezaca,["nagłówek"]=true,["aktywny"]=true,},};
----
if(czy_artykul_korzystany)then
if(analiza_stron_korzystanych_zbiorczych)then
local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
tekst_rozwiniety_calego_artykulu=stronicowyparser_stronasubst_modul.LiczOperacjeStronZbiorczych(self,tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
end;
end;
local strona;
if(czy_artykul_korzystany)then strona="";else strona=nazwa_modulu;end;
----
if(czy_artykul_korzystany)then
local stronicowyparser_szablonytekstu_modul=require("Module:StronicowyParser/SzablonyTekstu");
stronicowyparser_szablonytekstu_modul.UstawPobierzKorzystanie(tablica_zmiennych);
tekst_rozwiniety_calego_artykulu=stronicowyparser_szablonytekstu_modul.AktualizowanieSzablonowychTekstowychKompletowaniaInformacjiTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,IterowaniePoElementachTekstu) or tekst_rozwiniety_calego_artykulu;
end;
----
local function SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,tabela_elementow_strony_kodow,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca)
return function()
if(((czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane))
or((not czy_artykul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)))then
----
local tablica_obiektow_strony_danych_kodow_specjalnych_modul=nil;
----
tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_danych_kodow_specjalnych_modul=szablonowe_modul:KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false);
----
local function KtorySzablonMaZwracacKategorieNaglowek(numeracja_aktualna,nazwa_szablonu)
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"powtórka nagłowek w stronie korzystanej");
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"powtórka nagłówek w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki)
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
end;
local function KtorySzablonMaZwracacKategorieTekst(numeracja_aktualna,nazwa_szablonu)
if(czy_artykul_korzystany)then
if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej"))then
stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej");
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
else
stronicowyparser_problemy_modul.DodawanieProblemowegoElementuDoTablicy(self,"nagłowek w tekście rozdziału w stronie dołączonej",nil,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki);
if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=nazwa_szablonu..":"..(numeracja_aktualna or "");
end;
end;
end;
local function CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu()
return stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nagłówek w tekście rozdziału w stronie korzystanej");
end;
local nazwa_naglowka=stronicowyparser_obiekty_modul.nazwa_szablonu_wprowadzenia_tekstu;
local stronicowyparser_glownafunkcjazbieraniadanych_modul=require("Module:StronicowyParser/GłównaFunkcjaZbieraniaDanychStron");
local tablica_naglowka_obiekty=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_naglowka];
tablica_naglowka_obiekty.uchwyty_bez_numeracji={};
local toc=stronicowyparser_glownafunkcjazbieraniadanych_modul.SpisRzeczyWedlePodanegoTekstu(self,tekst_rozwiniety_calego_artykulu,strona, czy_artykul_korzystany,nil,tablica_naglowka_obiekty.uchwyty_bez_numeracji, nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,{KtorySzablonMaZwracacKategorieNaglowek,KtorySzablonMaZwracacKategorieTekst,CzyJestTakiProblemJakoElementTablicySzablonuNaglowkaPozaNapisemWprowadzeniaTekstu,},nil,tabela_elementow_strony_kodow);
tablica_danych_nazwy_artykulu.TOC=toc;
return true;
end;
end;
end;
local czy_spis_function=SpisToc(self,czy_artykul_korzystany,tablica_danych_nazwy_artykulu,tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_zmiennych,tabela_elementow_strony_kodow,nazwa_przestrzeni, nazwa_przestrzeni_ksiazki, nazwa_ksiazki, nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca);
local wynik=czy_spis_function();
if(not czy_artykul_korzystany)then
if(not wynik)then
tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=czy_spis_function;
end;
end;
StronaSubstFunkcja(tablica_danych_nazwy_artykulu,tablica_ksiazki.spis,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu);
if(czy_artykul_korzystany)then
self.tabela_listy_danych_analizy_ksiazki.link_wikidane=tablica_danych_nazwy_artykulu.link_wikidane;
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykulu=tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2;
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[nazwa_przestrzeni];
self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_przestrzeni_nazw[nazwa_przestrzeni_ksiazki];
self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki=self.tabela_listy_danych_analizy_ksiazki.tablica_ksiazek_w_danej_przestrzeni_nazw_ksiazki[nazwa_ksiazki];
--self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron=tablica_zmiennych;
end;
if(not czy_artykul_korzystany)then
tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=tablica_zmiennych;
if(not self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista)then self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista={};end;
table.insert(self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista,tablica_danych_nazwy_artykulu);
else
local dane_zebrane_ze_stron_lista=self.tabela_listy_danych_analizy_ksiazki.dane_zebrane_ze_stron_lista;
if(dane_zebrane_ze_stron_lista)then
for _,tablica_danych_nazwy_artykulu in ipairs(dane_zebrane_ze_stron_lista)do
tablica_danych_nazwy_artykulu.dane_zebrane_ze_stron=nil;
tablica_danych_nazwy_artykulu.TOCSPIS_FUNCTION=nil;
end;
end;
tablica_zmiennych.tablica_szablonu_tekstu_linkowe_korzystane=nil;
end;
return self.tabela_listy_danych_analizy_ksiazki,tablica_zmiennych,true;
end;
return p;
jku7lyw0yls0twuzwb8bwjp9gq2jqcx
Moduł:StronicowyParser/Rozdziały
828
58234
551284
551191
2026-08-10T20:59:28Z
Persino
2851
551284
Scribunto
text/plain
local p={};
function p.NapisWprowadzeniaTekstu(rozdzial,poziom)
local naglowek;
poziom=poziom or 1;
poziom=(poziom>0)and poziom or 1;
if(poziom<=6)then
local str_poziom=mw.ustring.rep("=",poziom);
naglowek="\n"..str_poziom..rozdzial..str_poziom.."\n";
else
naglowek="\n<h6 class=\"mw-hnumber mw-hnumber-"..poziom.."\">"..rozdzial.."</h6>\n";
end;
return naglowek;
end;
function p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(tekst,zawartosc,obiekt,kod)
if(mw.ustring.match(zawartosc,"\n"))then return false;end;
local szablonowe_modul=require("Module:Szablonowe");
local kod_norma_wzoru_obiektu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod);
tekst='\n'..tekst..'\n';
if(mw.ustring.match(tekst,"\n=+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*=+[^%S\n]*\n"))then return true;end;
if(mw.ustring.match(tekst,"\n[:#%*;]+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*\n"))then return true;end;
return false;
end;
function p.NapisWprowadzeniaTekstuHNumer(parametr)
local naglowek,poziom=p.PodajNapisPoziomuWprowadzeniaTekstu(parametr);
if(not naglowek)then return nil;end;
if(poziom<=6)then
return "<h"..poziom..">"..naglowek.."</h"..poziom..">";
else
return "<h6 class=\"mw-hnumber mw-hnumber-"..poziom.."\">"..naglowek.."</h6>";
end;
end;
function p.PodajNapisPoziomuWprowadzeniaTekstu(linia)
if(mw.ustring.match(linia,"^%s*=*%s*$"))then
return nil,0;
end;
local rowna_lewy=mw.ustring.match(linia,"^(=+)");
local rowna_prawy=mw.ustring.match(linia,"(=+)%s*$");
if((rowna_lewy)and(rowna_prawy))then
local min_rowna=math.min(#rowna_lewy,#rowna_prawy);
local str_min_rowna=mw.ustring.rep("=",min_rowna);
local naglowek=mw.ustring.match(linia,"^%s*"..str_min_rowna.."([^\n]*[^\n%=][^\n]*)"..str_min_rowna.."%s*$");
if(not naglowek)then
return nil,0;
end;
local naglowek=mw.text.trim(naglowek);
return naglowek,min_rowna;
else
return nil,0;
end;
end;
function p.PodajTekstHNumerNapisuWprowadzeniaTekstu(linia)
local liczba1,zawartosc,liczba2=mw.ustring.match(linia,"<[Hh](%d+)[^<>]*>(.-)</[Hh](%d+)>");
if(not liczba1)then return nil;end;
if((#liczba1==1)and(#liczba2==1)and(liczba1==liczba2))then
local liczba1=tonumber(liczba1);
if(not liczba1)then return nil;end;
if((liczba1<1)or(liczba1>6))then return nil;end;
return zawartosc,liczba1;
end;
return nil;
end;
function p.CzyJestNapisWprowadzeniaTekstu(zawartosc)
return mw.ustring.match(zawartosc,"^=+[^\n]*[^=\n]+[^\n]*=+[^%S\n]*\n")
or mw.ustring.match(zawartosc,"\n=+[^\n]*[^=\n]+[^\n]*=+[^%S\n]*\n")
or mw.ustring.match(zawartosc,"\n=+[^\n]*[^=\n]+[^\n]*=+[^%S\n]*$")
or mw.ustring.match(zawartosc,"^=+[^\n]*[^=\n]+[^\n]*=+[^%S\n]*$");
end;
function p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)
return mw.ustring.match(zawartosc,"^[;%*:#]+")
or mw.ustring.match(zawartosc,"\n[;%*:#]+");
end;
function p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz)
local czy_naglowek=p.CzyJestNapisWprowadzeniaTekstu(wiersz);
if(czy_naglowek)then return true,true;end;
--czy_naglowek=mw.ustring.match(wiersz,"<[Hh]%d+[^<>]*>(.+)</[Hh]%d+>");
local czy_naglowek=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz) and true or false;
return czy_naglowek,false;
end;
function p.WierszHNumer(tekst)
local tekst=mw.ustring.gsub(tekst,"(<[Hh](%d+)[^<>]*>)(.-)(</[Hh]%2%s*>)",function(lewy,poziom,tekst,prawy)
poziom=tonumber(poziom) or 0;
if((poziom>=1)and(poziom<=6))then
tekst=mw.ustring.gsub(tekst,"\n"," ");
return "\n"..lewy..tekst..prawy.."\n";
end;
end);
return tekst;
end;
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
-----
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
local linki_szablony_elementy_spisu_rzeczy=stronicowyparser_obiekty_modul.linki_szablony_elementy_spisu_rzeczy;
local inne_linki_szablony_elementy_spisu_rzeczy=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy;
-----
local szablonowe_modul=require("Module:Szablonowe");
local techniczne_modul=require("Module:Techniczne");
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
-----
local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
for szablon,obiekt,kod in iter do
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
if((linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu])or(inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu])or(stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod)))then
return true;
end;
end);
if(wynik)then return wynik;end;
elseif((obiekt=="LINKW")or(obiekt=="LINKZ"))then
return true;
--elseif((obiekt=="MATH")or(obiekt=="ŹRÓDŁO"))then
--return true;
end;
end;
return false;
end;
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)
local szablonowe_modul=require("Module:Szablonowe");
-----
local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
for szablon,obiekt,kod in iter do
if((obiekt=="INNEPRE")or(obiekt=="PRE")or(obiekt=="ŹRÓDŁO")or(obiekt=="MATH")or(obiekt=="GALERIA")or(obiekt=="MAPAOBRAZU"))then
return true;
end;
end;
return false;
end;
function p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja)
local czy=mw.ustring.match(rozdzial_z_numeracja,"^[%d%.]+%s+") or mw.ustring.match(rozdzial_z_numeracja,"^[%d%.]+%s*$");
if(czy)then
local num=mw.ustring.match(rozdzial_z_numeracja,"^([%d%.]+)");
local tab=mw.text.split(num,"%.",false);
if(#tab==1)then
if(mw.ustring.match(num,"^%d+$"))then
return rozdzial_z_numeracja,"";
end;
else
if(tab[#tab]=="")then tab[#tab]=nil;end;
end;
local tak=true;
for i=1,#tab,1 do
tak=tak and mw.ustring.match(tab[i],"^%d+$");
if(not tak)then break;end;
end;
if(tak)then
local numeracja=mw.ustring.match(rozdzial_z_numeracja,"^([%d%.]+)%s*");
local rozdzial_bez_numeracji=mw.ustring.gsub(rozdzial_z_numeracja,"^[%d%.]+%s*","");
return rozdzial_bez_numeracji,numeracja;
end;
end;
return rozdzial_z_numeracja,"";
end;
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
local tab_kom=stronicowyparser_obiekty_modul.szablony_kompletowania_stron_woluminu;
return tab_kom[nazwa_szablonu];
end;
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()
return true;
end;
function p.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local rozdzial=mw.ustring.match(linia,"^('+..-:[%s_]-'*)[%s_]*$") or ((not mw.ustring.match(linia,"^%s+"))and(mw.ustring.match(linia,"^(..-:[%s_]-'*)[%s_]*$")));
if(rozdzial)then
return rozdzial,true;
else
local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local spis_tresci=stronicowyparser_analizaspisurzeczy_modul.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true);
if(spis_tresci)then
return linia,true;
else
local rozdzial,main=nil,nil;
if(not mw.ustring.match(linia,"^'+.-[^'%s].-'+.-[^'%s]%s*$"))then
rozdzial,main=mw.ustring.match(linia,"^('+[%s_]*(..-)[%s_]*'*)[%s_]*$");
end;
if(rozdzial)then
local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści");
local rozdzial_main=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
if(not mw.ustring.match(rozdzial_main,"^.*![%s_]*'*[%s_]*$"))then
if(mw.ustring.match(rozdzial_main,"^[^']-$"))then
if((not mw.ustring.match(rozdzial_main,"^%u[%s_]"))and(not mw.ustring.match(rozdzial_main,"[%s_]%u$")))then
return rozdzial,true;
end;
end;
end;
else
local czy_nie_rozdzial_zerowy=mw.ustring.match(linia,"%.%s*$");
if(czy_nie_rozdzial_zerowy)then return linia,false;end;
end;
return nil;
end;
end;
end;
function p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,z_parametrami_linkowymi,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
if((not przedrotek_listy)or(#przedrotek_listy==0))then return false;end;
local czy_dwukropki=mw.ustring.match(przedrotek_listy,"^:+$");
if(not czy_dwukropki)then return false;end;
local czy_miedzy_cudzyslowami=mw.ustring.match(linia,"^%s*''+.+'*%s*$");
if(not czy_miedzy_cudzyslowami)then return false;end;
if(not z_parametrami_linkowymi)then return true;end;
local szablonowe_modul=require("Module:Szablonowe");
local czy_sa_kody=mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu());
if(not czy_sa_kody)then return true;end;
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
for szablon,obiekt,kod in iterator do
if((obiekt=="SZABLON")or(obiekt=="LINKW"))then
local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych);
if((tab_pozycja_elementow_w_spisie_rzeczy)and(numer_rodzaju_artykulu==1))then
return false;
end;
end;
end;
return true;
end;
function p.HnNumerWprowadzeniaTekstu(nazwa,atrybuty)
local stronicowyparser_obiekty_modul=mw.loadData('Module:StronicowyParser/obiekty');
local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu;
local numer_rozdzialu=znaczniki_wprowadzenia_tekstu[nazwa];
if((atrybuty)and(numer_rozdzialu>=6))then
local klasa=atrybuty["class"];
if(klasa)then
local mw_hnumber_liczba=mw.ustring.match(klasa,"^%s*mw%-hnumber%-(%d+)%s*$")
or mw.ustring.match(klasa,"^%s*mw%-hnumber%-(%d+)%s+")
or mw.ustring.match(klasa,"%s+mw%-hnumber%-(%d+)%s+")
or mw.ustring.match(klasa,"%s+mw%-hnumber%-(%d+)%s*$");
mw_hnumber_liczba=tonumber(mw_hnumber_liczba) or 6;
mw_hnumber_liczba=(mw_hnumber_liczba>6) and mw_hnumber_liczba or 6;
numer_rozdzialu=mw_hnumber_liczba or numer_rozdzialu;
end;
end;
return numer_rozdzialu;
end;
function p.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc)
local numeracja,rozdzial=mw.ustring.match(zawartosc,"^%s*([%d%.]*)%s*(.-)%s*$");
return numeracja,rozdzial;
end;
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
local zacznij;local wprowadzenie;local zawsze=false;local ostatnie=false;local bez_kropki=nil;local spac=nil;local nie_rozdzial=nil;local nie_numerowany=nil;
local stronicowyparser_obiekty_modul=mw.loadData('Module:StronicowyParser/obiekty');
local parametry_modul=require("Module:Parametry");
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści");
local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local techniczne_modul=require("Module:Techniczne");
local specjalne_modul=require("Module:Specjalne");
local strony_modul=require("Module:Strony");
local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy;
local linki_szablony_elementy_spisu_rzeczy=stronicowyparser_obiekty_modul.linki_szablony_elementy_spisu_rzeczy;
local inne_linki_szablony_elementy_spisu_rzeczy=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy;
local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu;
local maksymalny_rozmiar_rozdzialu_zerowego=70;
return function(linia,tak_ce_spis_tresci)
----
local rozdzial=nil;local numeracja=nil;
local poczatek,rozdzial_z_numeracja=mw.ustring.match(linia,"^([#:%*;]+)%s*('*%s*[%d%.]*%s*.-%s*'*)%s*$");
local rozdzial_z_numeracja_nie_przetworzone=nil;
-----
----
if(not poczatek and not rozdzial_z_numeracja)then
rozdzial_z_numeracja=mw.ustring.match(linia,"^([%d%.]+%s*.-)%s*$") or mw.ustring.match(linia,"^'+(%s*[%d%.]+%s*.-)%s*'*%s*$")
if(rozdzial_z_numeracja)then
poczatek="";
rozdzial_z_numeracja=specjalne_modul["UsuńZnakiSpecjalne"](rozdzial_z_numeracja);
rozdzial_z_numeracja=mw.ustring.gsub(rozdzial_z_numeracja,"^(%s+)","");
rozdzial_z_numeracja=mw.ustring.gsub(rozdzial_z_numeracja,"(%s+)$","");
rozdzial,numeracja=p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja);
else
local function LiniaCydzyslow(linia)
local linia_wew_cudz=mw.ustring.match(linia,"^'+%s*(.-[^']+.-)%s*'+%s*$")
if(not linia_wew_cudz)then return false;end;
return not (mw.ustring.match(linia_wew_cudz,'^%u[%u%s]*$')
and((mw.ustring.match(linia_wew_cudz,"%s%u%s"))or(mw.ustring.match(linia_wew_cudz,"^%u%s"))or(mw.ustring.match(linia_wew_cudz,"%s%u$"))))
end;
if(LiniaCydzyslow(linia))then
rozdzial=linia;
poczatek="";
numeracja="";
else
local url_iter=mw.ustring.gmatch(linia,"(%S+)");
local czy_rozdzial=false;
for url in url_iter do
czy_rozdzial=czy_rozdzial or strony_modul.SprawdzanieURL(url);
if(czy_rozdzial)then
break;
end;
end;
if(czy_rozdzial)then
poczatek="";
numeracja="";
rozdzial=linia;
end;
end;
end;
else
rozdzial_z_numeracja_nie_przetworzone=rozdzial_z_numeracja;
rozdzial_z_numeracja=specjalne_modul["UsuńZnakiSpecjalne"](rozdzial_z_numeracja);
rozdzial_z_numeracja=mw.ustring.gsub(rozdzial_z_numeracja,"^(%s+)","");
rozdzial_z_numeracja=mw.ustring.gsub(rozdzial_z_numeracja,"(%s+)$","");
rozdzial,numeracja=p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja);
end;
local ze_specialnymi_obiektami=((rozdzial) and true or false);local czy_centrowanie=false;local czy_znaczniki_hn=false;local tekst;
local nazwa,zawartosc,atrybuty;
if(rozdzial)then tekst=rozdzial;else tekst=linia;end;
----
local function WykluczenieNieodpowiednichNormSzablonowych(rozdzial)
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(rozdzial,nil,tablica_analizy_obiektow_strony_dany_modul);
for szablon,obiekt,kod in iterator do
if((obiekt=="GALERIA")or(obiekt=="ŹRÓDŁO")or(obiekt=="PRE")or(obiekt=="INNEPRE")or(obiekt=="WIKITABELA")or(obiekt=="MAPAOBRAZU"))then
return nil;
elseif(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
if(stronicowyparser_obiekty_modul.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego[nazwa_szablonu])then
return true;
end;
end);
if(wynik)then return nil;end;
end;
end;
return true;
end;
local FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu=function(wartosc)
if(mw.ustring.match(wartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return nil;end;
if(mw.ustring.match(wartosc,"!%s*'*%s*$"))then return nil;end;
numeracja,rozdzial=p.NumeracjaOrazTekstWprowadzeniaTekstu(wartosc);
if(rozdzial)then
local wynik=WykluczenieNieodpowiednichNormSzablonowych(rozdzial);
if(not wynik)then
numeracja=nil;rozdzial=nil;
return nil;
end;
end;
end;
local function NiestardardoweSzablonoweWprowdzeniaTekstu(szablon,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
local czy_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
if(czy_ce)then
local wartosc=tabela_parametrow_szablonu[czy_ce];
if(wartosc)then
return FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu(wartosc);
end;
return nil;
end;
end;
local function NiestardardoweZnacznikoweWprowdzeniaTekstu(szablon,nazwa,zawartosc,atrybuty)
if(zawartosc)then
if((nazwa=="center")or(znaczniki_wprowadzenia_tekstu[nazwa]))then
return FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu(zawartosc);
end;
end;
return nil;
end;
----
local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod)
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
---
local czy_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
if(czy_ce)then
ze_specialnymi_obiektami=true;
czy_centrowanie=true;
NiestardardoweSzablonoweWprowdzeniaTekstu(szablon,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow);
--if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
return true;
elseif((linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu])or(inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu])or(stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod)))then
ze_specialnymi_obiektami=true;
if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
return true;
end;
end);
if(wynik)then return;end;
elseif((obiekt=="LINKW")or(obiekt=="LINKZ"))then
if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
ze_specialnymi_obiektami=true;
return nil;
elseif((obiekt=="PRE")or(obiekt=="MATH")or(obiekt=="ŹRÓDŁO")or(obiekt=="INNEPRE"))then
if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
ze_specialnymi_obiektami=true;
return nil;
elseif(obiekt=="ZNACZNIK")then
nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod);
if(zawartosc)then
if(nazwa=="center")then
ze_specialnymi_obiektami=true;
czy_centrowanie=true;
NiestardardoweZnacznikoweWprowdzeniaTekstu(szablon,nazwa,zawartosc,atrybuty);
--if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
return nil;
elseif(znaczniki_wprowadzenia_tekstu[nazwa])then
ze_specialnymi_obiektami=true;
czy_znaczniki_hn=true;
NiestardardoweZnacznikoweWprowdzeniaTekstu(szablon,nazwa,zawartosc,atrybuty);
return nil;
end;
end;
end;
return szablon;
end);
for szablon,obiekt,kod in iter do end;
rozdzial=rozdzial and parametry_modul["Odstępy"](rozdzial) or nil;
poczatek=poczatek and parametry_modul["Odstępy"](poczatek) or nil;
numeracja=numeracja and parametry_modul["Odstępy"](numeracja) or nil;
if(not ze_specialnymi_obiektami)then
local rozdzial,czy_standardowe_rozdzialy=p.CzyZerowyNapisWprowadzeniaTekstu(rozdzial or linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
if((rozdzial)and(czy_standardowe_rozdzialy))then
if(#rozdzial<=maksymalny_rozmiar_rozdzialu_zerowego)then
if(not mw.ustring.match(rozdzial,"^.+[%.%;!,%?]%s*'+%s*$"))then
return linia,rozdzial,0,nil,numeracja;
else
return nil;
end;
else
local czy_poczatek_niepusty=parametry_modul.CzyTak(poczatek);
local czy_numeracja_niepusta=parametry_modul.CzyTak(numeracja);
if(((not czy_poczatek_niepusty)or(#poczatek==0))and((not czy_numeracja_niepusta)or(#numeracja==0)))then
return nil;
elseif(not mw.ustring.match(rozdzial,"^.+[%.%;!,%?]%s*'+%s*$"))then
return linia,rozdzial,0,nil,numeracja;
else
return nil;
end;
end;
else
return nil;
end;
elseif(czy_centrowanie)then
if(tak_ce_spis_tresci)then
if((rozdzial)and(numeracja))then
if((not parametry_modul.CzyTak(numeracja))and(not parametry_modul.CzyTak(rozdzial)))then
return nil,nil,nil,nil;
end;
return linia,rozdzial,2,nil,numeracja,true;
end;
end;
return nil;
elseif(czy_znaczniki_hn)then
if((rozdzial)and(numeracja))then
if((not parametry_modul.CzyTak(numeracja))and(not parametry_modul.CzyTak(rozdzial)))then
return nil,nil,nil,nil;
end;
local numer_rozdzialu=p.HnNumerWprowadzeniaTekstu(nazwa,atrybuty);
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
end;
elseif(rozdzial)then
local czy_numeracja_niepusta=parametry_modul.CzyTak(numeracja);
local czy_rozdzial_niepusty=parametry_modul.CzyTak(rozdzial);
if((not czy_numeracja_niepusta)and(not czy_rozdzial_niepusty))then
return nil;
end;
if(#rozdzial<=maksymalny_rozmiar_rozdzialu_zerowego)then
local czy_pominac_ten_rozdzial_jako_rozdzial=rozdzial_z_numeracja_nie_przetworzone and p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(poczatek,rozdzial_z_numeracja_nie_przetworzone,false,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) or nil;
if(not czy_pominac_ten_rozdzial_jako_rozdzial)then
if((#poczatek>0)or(not mw.ustring.match(rozdzial,"^.+[%.%;!,%?]%s*'+%s*$")))then
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
else
return nil;
end;
else
return nil;
end;
else
local czy_poczatek_niepusty=parametry_modul.CzyTak(poczatek);
if(((not czy_poczatek_niepusty)or(#poczatek==0))and((not czy_numeracja_niepusta)or(#numeracja==0)))then
return nil;
else
local czy_pominac_ten_rozdzial_jako_rozdzial=rozdzial_z_numeracja_nie_przetworzone and p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(poczatek,rozdzial_z_numeracja_nie_przetworzone,false,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) or nil;
if(not czy_pominac_ten_rozdzial_jako_rozdzial)then
if((#poczatek>0)or(not mw.ustring.match(rozdzial,"^.+[%.%;!,%?]%s*'+%s*$")))then
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
else
return nil;
end;
else
return nil;
end;
end;
end;
else
return nil;
end;
return nil;
end;
end;
function p.TekstPoNapisieWprowadzeniaTekstuStrony(frame)
local strona=frame.args[1];
local id_rozdzialu1=frame.args[2] or "";
local id_rozdzialu2=frame.args[3] or "";
strona=frame:preprocess(strona);
local title=mw.title.makeTitle('',strona);
if((not title)or(not title.exists))then
return nil;
end;
local tekst=title:getContent();
if(not tekst)then return nil;end;
return p.TekstWprowadzeniaTekstu(tekst,id_rozdzialu1,id_rozdzialu2);
end;
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)
tekst=mw.ustring.gsub(tekst,"^[%s_]+","");
tekst=mw.ustring.gsub(tekst,"[%s_]+$","");
tekst=mw.ustring.gsub(tekst,"[%s_]+","_");
return tekst;
end;
function p.ZwracanieSekcjiNapisuWprowadzeniaTekstuStrony(frame)
local strona=frame.args[1];
local id_rozdzialu=frame.args[2] or "";
strona=frame:preprocess(strona);
local title=mw.title.makeTitle('',strona);
if((not title)or(not title.exists))then
return nil;
end;
local tekst=title:getContent();
if(not tekst)then return nil;end;
id_rozdzialu=frame:preprocess(id_rozdzialu);
local specjalne_modul=require("Module:Specjalne");
id_rozdzialu=specjalne_modul["WydzielZwykłyTekst"](id_rozdzialu);
id_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(id_rozdzialu);
local html_modul=require("Module:Html");
id_rozdzialu=html_modul.DecodeKoduHTMLZnaku(id_rozdzialu);
tekst=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>","");
tekst=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1");
--tekst=mw.ustring.gsub(tekst,"\n\n","\n\n");
tekst=p.WierszHNumer(tekst);
local szeregi_modul=require("Module:Szeregi");
local iter=szeregi_modul.IteratorLiniiTekstu(tekst);
local tab_rozdzialy={};
local specjalne_modul=require("Module:Specjalne");
for wiersz in iter do
local czy_naglowek,czy_naglowek_wiki=p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz);
if(czy_naglowek)then
local nazwa_rozdzialu,poziom_rozdzialu;
if(czy_naglowek_wiki)then
nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomuWprowadzeniaTekstu(wiersz);
else
nazwa_rozdzialu,poziom_rozdzialu=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz);
end;
nazwa_rozdzialu=frame:preprocess(nazwa_rozdzialu);
local nazwa_rozdzialu_aktualna=nazwa_rozdzialu;
nazwa_rozdzialu=specjalne_modul["WydzielZwykłyTekst"](nazwa_rozdzialu);
nazwa_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(nazwa_rozdzialu);
nazwa_rozdzialu=html_modul.DecodeKoduHTMLZnaku(nazwa_rozdzialu);
local c=1;
for i=1,#tab_rozdzialy,1 do
if(tab_rozdzialy[i]==nazwa_rozdzialu)then
c=c+1;
end;
end;
if(c>1)then
nazwa_rozdzialu=nazwa_rozdzialu.."_"..c;
end;
table.insert(tab_rozdzialy,nazwa_rozdzialu);
if(id_rozdzialu==nazwa_rozdzialu)then
return nazwa_rozdzialu_aktualna;
end;
end;
end;
return nil;
end;
function p.NumerSekcjiStrony(frame)
local strona=frame.args[1];
local id_rozdzialu=frame.args[2] or "";
strona=frame:preprocess(strona);
local title=mw.title.makeTitle('',strona);
if((not title)or(not title.exists))then
return nil;
end;
local tekst=title:getContent();
if(not tekst)then return nil;end;
id_rozdzialu=frame:preprocess(id_rozdzialu);
local specjalne_modul=require("Module:Specjalne");
id_rozdzialu=specjalne_modul["WydzielZwykłyTekst"](id_rozdzialu);
id_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(id_rozdzialu);
local html_modul=require("Module:Html");
id_rozdzialu=html_modul.DecodeKoduHTMLZnaku(id_rozdzialu);
tekst=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>","");
tekst=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1");
--tekst=mw.ustring.gsub(tekst,"\n\n","\n\n");
tekst=p.WierszHNumer(tekst);
local szeregi_modul=require("Module:Szeregi");
local iter=szeregi_modul.IteratorLiniiTekstu(tekst);
local tab_rozdzialy={};
local ile=1;
for wiersz in iter do
local czy_naglowek,czy_naglowek_wiki=p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz);
if(czy_naglowek)then
local nazwa_rozdzialu,poziom_rozdzialu;
if(czy_naglowek_wiki)then
nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomuWprowadzeniaTekstu(wiersz);
else
nazwa_rozdzialu,poziom_rozdzialu=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz);
end;
nazwa_rozdzialu=frame:preprocess(nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["WydzielZwykłyTekst"](nazwa_rozdzialu);
nazwa_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(nazwa_rozdzialu);
nazwa_rozdzialu=html_modul.DecodeKoduHTMLZnaku(nazwa_rozdzialu);
local c=1;
for i=1,#tab_rozdzialy,1 do
if(tab_rozdzialy[i]==nazwa_rozdzialu)then
c=c+1;
end;
end;
if(c>1)then
nazwa_rozdzialu=nazwa_rozdzialu.."_"..c;
end;
table.insert(tab_rozdzialy,nazwa_rozdzialu);
if(id_rozdzialu==nazwa_rozdzialu)then
return ile;
end;
ile=ile+1;
end
end;
return nil;
end;
function p.TekstWprowadzeniaTekstu(tekst,id_rozdzialu1,id_rozdzialu2)
local frame=mw.getCurrentFrame();
local specjalne_modul=require("Module:Specjalne");
local html_modul=require("Module:Html");
id_rozdzialu1=frame:preprocess(id_rozdzialu1);
id_rozdzialu1=specjalne_modul["WydzielZwykłyTekst"](id_rozdzialu1);
id_rozdzialu1=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(id_rozdzialu1);
id_rozdzialu1=html_modul.DecodeKoduHTMLZnaku(id_rozdzialu1);
id_rozdzialu2=frame:preprocess(id_rozdzialu2);
id_rozdzialu2=specjalne_modul["WydzielZwykłyTekst"](id_rozdzialu2);
id_rozdzialu2=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(id_rozdzialu2);
id_rozdzialu2=html_modul.DecodeKoduHTMLZnaku(id_rozdzialu2);
tekst=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>","");
tekst=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1");
--tekst=mw.ustring.gsub(tekst,"\n\n","\n\n");
tekst=p.WierszHNumer(tekst);
local szeregi_modul=require("Module:Szeregi");
local iter=szeregi_modul.IteratorLiniiTekstu(tekst);
local tab_rozdzialy={};
local str=""
local nazwa_rozdzialu_aktualna;
local poziom_rozdzialu_aktualny;
for wiersz in iter do
local czy_naglowek,czy_naglowek_wiki=p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz);
if(czy_naglowek)then
local nazwa_rozdzialu,poziom_rozdzialu;
if(czy_naglowek_wiki)then
nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomuWprowadzeniaTekstu(wiersz);
else
nazwa_rozdzialu,poziom_rozdzialu=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz);
end;
nazwa_rozdzialu=frame:preprocess(nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["WydzielZwykłyTekst"](nazwa_rozdzialu);
nazwa_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(nazwa_rozdzialu);
nazwa_rozdzialu=html_modul.DecodeKoduHTMLZnaku(nazwa_rozdzialu);
local c=1;
for i=1,#tab_rozdzialy,1 do
if(tab_rozdzialy[i]==nazwa_rozdzialu)then
c=c+1;
end;
end;
if(c>1)then
nazwa_rozdzialu=nazwa_rozdzialu.."_"..c;
end;
table.insert(tab_rozdzialy,nazwa_rozdzialu);
if(((nazwa_rozdzialu_aktualna)and(nazwa_rozdzialu_aktualna==id_rozdzialu1))
and((((id_rozdzialu2=="")or(not id_rozdzialu2))and(poziom_rozdzialu<=poziom_rozdzialu_aktualny))or(nazwa_rozdzialu==id_rozdzialu2)))then
return str;
end;
if((id_rozdzialu1~="")and(nazwa_rozdzialu==id_rozdzialu1))then
nazwa_rozdzialu_aktualna=nazwa_rozdzialu;
poziom_rozdzialu_aktualny=poziom_rozdzialu;
str="";
elseif(id_rozdzialu1=="")then
nazwa_rozdzialu_aktualna="";
poziom_rozdzialu_aktualny=0;
if(id_rozdzialu2=="")then
return str;
elseif(nazwa_rozdzialu==id_rozdzialu2)then
return str;
else
str=(str~="")and (str.."\n"..wiersz) or wiersz;
end;
else
str=(str~="")and (str.."\n"..wiersz) or wiersz;
end;
else
str=(str~="")and (str.."\n"..wiersz) or wiersz;
end;
end;
if((id_rozdzialu1)and(id_rozdzialu1==""))then
return str;
elseif((nazwa_rozdzialu_aktualna)and(nazwa_rozdzialu_aktualna==id_rozdzialu1))then
return str;
end;
return "";
end;
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)
if((tablica_danych_parametrow_szablonu_strony)and(kod))then
local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[-5];
if(tablica_danych_parametrow_szablonu_strony_numer)then
local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
if(tablica_danych_parametrow_szablonu_strony_numer_kod)then
return tablica_danych_parametrow_szablonu_strony_numer_kod.szereg_znakowy;
end;
end;
end;
local szablonowe_modul=require("Module:Szablonowe");
----
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
local ktore=szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu[nazwa_szablonu];
if(not ktore)then return;end;
local tab=mw.text.split(tostring(ktore),"%s*;%s*",false);
local wynik="";
for _,num in pairs(tab)do
local numer_parametru=tonumber(num) or num;
for parametr,wartosc in pairs(tabela_parametrow_szablonu)do
if(parametr==numer_parametru)then
wynik=(wynik or "")..wartosc;
end;
end;
end;
return wynik;
end);
if((tablica_danych_parametrow_szablonu_strony)and(kod)and(wynik))then
if(not tablica_danych_parametrow_szablonu_strony[-5])then tablica_danych_parametrow_szablonu_strony[-5]={};end;
local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[-5];
if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end;
local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
tablica_danych_parametrow_szablonu_strony_numer_kod.szereg_znakowy=wynik;
end;
return wynik;
end;
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)
if((tablica_danych_parametrow_szablonu_strony)and(kod))then
local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[-6];
if(tablica_danych_parametrow_szablonu_strony_numer)then
local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
if(tablica_danych_parametrow_szablonu_strony_numer_kod)then
return tablica_danych_parametrow_szablonu_strony_numer_kod.szereg_znakowy;
end;
end;
end;
local szablonowe_modul=require("Module:Szablonowe");
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
local szablony_z_dodatkiem_obiektowym=stronicowyparser_obiekty_modul.szablony_z_dodatkiem_obiektowym;
local dodatek=szablony_z_dodatkiem_obiektowym[nazwa_szablonu];
if(dodatek)then
local techniczne_modul=require("Module:Techniczne");
for name,value in pairs(tabela_parametrow_szablonu)do
local name=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](name);
local value=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](value);
dodatek=mw.ustring.gsub(dodatek,"%$%("..name.."%)",value);
end;
return dodatek;
end;
end);
if((tablica_danych_parametrow_szablonu_strony)and(kod)and(wynik))then
if(not tablica_danych_parametrow_szablonu_strony[-6])then tablica_danych_parametrow_szablonu_strony[-6]={};end;
local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[-6];
if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end;
local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
tablica_danych_parametrow_szablonu_strony_numer_kod.szereg_znakowy=wynik;
end;
return wynik;
end;
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)
local szablonowe_modul=require("Module:Szablonowe");
local techniczne_modul=require("Module:Techniczne");
tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji)
return "\n\n ";
end,nil,nil,
function(szablon,obiekt,kod,poziom_iteracji)
if(poziom_iteracji==0)then
if(obiekt=="ZNACZNIK")then
local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod);
if((nazwa=="br")or(nazwa=="hr"))then
return true;
end;
elseif(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
----
if((nazwa_szablonu=="Br")or(nazwa_szablonu=="Hr"))then
return true;
end;
end);
if(wynik)then return wynik;end;
end;
end;
return nil;
end,nil,nil,nil,nil,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,nil,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE);
return tekst;
end;
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)
local CzySpecjalnaLinia=function(linia)
local czy_specjalna_linia=mw.ustring.match(linia,"^[%*,;:#]+") or mw.ustring.match(linia,"^%s*$") or mw.ustring.match(linia,"^%-%-%-%-");
if(not czy_specjalna_linia)then
if(mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))then
return true;
end;
end;
return czy_specjalna_linia;
end;
----
local szablonowe_modul=require("Module:Szablonowe");
local techniczne_modul=require("Module:Techniczne");
local CzyLiniaZeSpecjalnymiSzablonami=function(linia)
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
local szablony_w_nie_w_tej_samej_linii=stronicowyparser_obiekty_modul.szablony_w_nie_w_tej_samej_linii;
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nazwa_modulu,tablica_obiektow_strony_dany_modul_uzyskany);
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
if(szablony_w_nie_w_tej_samej_linii[nazwa_szablonu])then
return true;
end;
end);
if(wynik)then return wynik;end;
end;
end;
return nil;
end;
----
--tekst=p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony);
----
local tab_linie_tekstu=mw.text.split(tekst,"\n");
if(#tab_linie_tekstu==0)then return "";end;
local tekst_nowy=tab_linie_tekstu[1];
local czy_linia_poprz=CzySpecjalnaLinia(tekst_nowy) or CzyLiniaZeSpecjalnymiSzablonami(tekst_nowy);
if(not czy_linia_poprz)then
tekst_nowy=p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst_nowy,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE);
end;
for i=2,#tab_linie_tekstu,1 do
local linia=tab_linie_tekstu[i];
local aktualna_specjalna_linia=CzySpecjalnaLinia(linia) or CzyLiniaZeSpecjalnymiSzablonami(linia);
if(not aktualna_specjalna_linia)then
linia=p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE);
end;
if((not czy_linia_poprz)and(not aktualna_specjalna_linia))then
--local czy_wprowadzenie=mw.ustring.match(linia,"^>")
local tekst_nowy2=mw.ustring.match(tekst_nowy,"^(.*\n)[^%S\n]*\n[^%S\n]*$");
tekst_nowy=(tekst_nowy2 or tekst_nowy)..((tekst_nowy2) and "" or " ")..linia;
else
tekst_nowy=tekst_nowy.."\n"..linia;
end;
czy_linia_poprz=aktualna_specjalna_linia;
end;
return tekst_nowy;
end;
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
local nazwy_modul=require("Module:Nazwy");
tablica_analizy_obiektow_strony_dany_modul=tablica_analizy_obiektow_strony_dany_modul or {};
tablica_danych_parametrow_szablonu_strony=tablica_danych_parametrow_szablonu_strony or {};
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
local stronicowyparser_analizaaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy;
local szablonowe_modul=require("Module:Szablonowe");
local parametry_modul=require("Module:Parametry");
local techniczne_modul=require("Module:Techniczne");
local html_modul=require("Module:Html");
local szeregi_modul=require("Module:Szeregi");
local szablony_do_usuwania_z_tekstu=stronicowyparser_obiekty_modul.szablony_do_usuwania_z_tekstu;
local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu;
local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
local pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej=(nazwa_przestrzeni and nazwa_przestrzeni_ksiazki and nazwa_ksiazki and nazwa_spisu_tresci)
and nazwy_modul["NazwaModułu"](((nazwy_np_modul.Template~=nazwa_przestrzeni) and (nazwa_przestrzeni) or ""),nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci)
or nil;
local pelna_nazwa_spisu_tresci_szablonowa=((pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej)and(((nazwa_przestrzeni=="") and ":" or "")..pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej) or nil);
local tab_analiza=szablonowe_modul.LiczbyParametroweInformacjiBazyKodowaniaWikikodu();
local __FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE=function(szablon,obiekt,kod,poziom_iteracji)
local tab_obiekt=tab_analiza[obiekt];
if(not tab_obiekt)then return;end;
for _,wartosc in pairs(tab_obiekt)do
local element_wartosc=tablica_danych_parametrow_szablonu_strony[wartosc];
if(element_wartosc)then
element_wartosc[kod]=nil;
end;
end;
end;
local __FUNKCJA_OPERACJE_USUWANIE_BAZOWE=function(szablon,obiekt,kod,poziom_iteracji)
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=nil;
end;
--local tab_nazwa_spisow_przekierowaniowych={};
if(czy_dalej_rozwazac_zakodowane)then
----
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=stronicowyparser_obiekty_modul.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local tab_szablony_bez_generowania_napisowego=stronicowyparser_obiekty_modul.szablony_bez_generowania_napisowego;
local szablony_nie_typowo_linkowe=stronicowyparser_obiekty_modul.szablony_nie_typowo_linkowe;
local znaczniki_szablonowe=stronicowyparser_obiekty_modul.znaczniki_szablonowe;
local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu;
----
local function UsuwanieNowychLiniiZnacznikowe(szablon)
local tak=nil;
szablon=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji)
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
-----
if((nazwa_szablonu=="Br")or(nazwa_szablonu=="Hr"))then
if(poziom_iteracji==0)then tak=true;end;
return " ";
end;
end);
if(wynik)then return wynik,nil,true;end;
elseif(obiekt=="ZNACZNIK")then
local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod);
if((nazwa=="br")or(nazwa=="hr"))then
if(poziom_iteracji==0)then tak=true;end;
return " ",nil,true;
end;
end;
return nil,true;
end,nil,nil,nil,nil,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,nil,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE);
return szablon,tak;
end;
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)
local czy_tak=false;
local szablon=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji)
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
local czy_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
if(czy_ce)then
local szablon_spis_tresci_zawartosc=tabela_parametrow_szablonu[czy_ce];
if(szablon_spis_tresci_zawartosc)then
czy_tak=czy_tak or true;
return szablon_spis_tresci_zawartosc;
end;
end;
return nil;
end);
if(wynik)then return wynik,nil,true;end;
return nil,true;
elseif(obiekt=="ZNACZNIK")then
local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod);
if(zawartosc)then
if((nazwa=="center")or(znaczniki_wprowadzenia_tekstu[nazwa]))then
czy_tak=czy_tak or true;
return zawartosc,nil,true;
end;
end;
end;
return nil,true;
end,nil,nil,nil,nil,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,nil,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE);
return szablon,czy_tak;
end;
local Modyfikacja=function(szablon,obiekt,kod)
local czy_tak=false;
local szablon,czy_tak1=UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu(szablon,obiekt,kod);
czy_tak=czy_tak or czy_tak1;
local szablon,czy_tak2=UsuwanieNowychLiniiZnacznikowe(szablon);
czy_tak=czy_tak or czy_tak2;
local szablon,ile=mw.ustring.gsub(szablon,"\n"," ");
czy_tak=czy_tak or (ile>0);
return szablon,czy_tak;
end;
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)
if(obiekt=="SZABLON")then
local tabela_parametrow_szablonu=parametr1;
local nazwa_szablonu=parametr2;
local tabela_modyfikatorow=parametr3;
if(szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu])then
local wynik,czy_tak=Modyfikacja(szablon,obiekt,kod);
if(not czy_tak)then return nil,true;end;
return wynik,true;
end;
elseif(obiekt=="ZNACZNIK")then
local nazwa=parametr1;
local zawartosc=parametr2;
local tab_atrybuty=parametr3;
if((nazwa=="center")or(znaczniki_wprowadzenia_tekstu[nazwa]))then
local wynik,czy_tak=Modyfikacja(szablon,obiekt,kod);
if(not czy_tak)then return nil,true;end;
return wynik,true;
end;
end;
end;
----
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
---
--local tab_nazwa_spisow_przekierowaniowych={};
---
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)
local spacja=" ";
local tab_spacja={
["nbsp"]=spacja,
["#32"]=spacja,
["#x20"]=spacja,
};
komorka=mw.ustring.gsub(komorka,"&([^&;]+);",tab_spacja);
local komorka_stara=komorka;
if(not nie_trimowanie)then
komorka=mw.text.trim(komorka);
end;
if(mw.ustring.match(komorka_stara,"^%s*[#%*:;>]"))then komorka=" "..komorka;end;
return ((not nie_trimowanie)and ("\n\n"..komorka.."\n") or komorka);
end;
----
local function ZamienNaKody(zawartosc,czy_szablon)
local function Linie(wzor)
zawartosc=mw.ustring.gsub(zawartosc,wzor,function(a,b)
return "&#"..mw.ustring.byte(a)..";"..(b or "");
end);
end;
if(not (mw.ustring.sub(zawartosc,1,1)=="\n"))then
Linie("^([=%*#:;])");
end;
local len=mw.ustring.len(zawartosc);
if(not (mw.ustring.sub(zawartosc,len,len)=="\n"))then
Linie("([=])([^%S\n]*)$");
end;
return zawartosc;
end;
tekst_rozwiniety_calego_artykulu=szablonowe_modul:KodowanieNiezakodowanychNormKodowychReferencjiTekstu(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false,function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)
if(obiekt=="SZABLON")then
local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=parametr1,parametr2,parametr3;
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
local numer_parametru=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu];
if(numer_parametru)then
local parametr=tabela_parametrow_szablonu[numer_parametru];
if(parametr)then
local czy_modyfikacja=false;
szablon=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod)
if(obiekt=="ZNACZNIK")then
local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod);
if(nazwa=="div")then
if(p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(parametr,zawartosc,obiekt,kod))then
czy_modyfikacja=true;
return zawartosc and ZamienNaKody(PrzetwarzanieZnacznikowe(zawartosc,true),false) or "";
end;
end;
end;
return nil,true;
end,nil,nil,nil,nil,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,nil,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE);
if(czy_modyfikacja)then
return szablon;
end;
end;
end;
local function AnalizaSzablonu(szablon)
local wynik=p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod);
if(wynik)then return wynik;end;
if(szablony_do_usuwania_z_tekstu[nazwa_szablonu])then return "";end;
local czy_szablony_bez_generowania_napisowego=tab_szablony_bez_generowania_napisowego[nazwa_szablonu];
if(czy_szablony_bez_generowania_napisowego)then return "";end;
if(szablony_nie_typowo_linkowe[nazwa_szablonu])then return "";end;
--if(mw.ustring.match(nazwa_szablonu,"/"))then return "";end;
end;
local szablon2=AnalizaSzablonu(szablon);
if(szablon2)then return szablon2;end;
local czy_center;
szablon,czy_center=UsuwanieZnacznikowe(szablon2 or szablon,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) or szablon2;
if(szablon)then
local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[1];
if(tablica_danych_parametrow_szablonu_strony_numer)then
local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
if(tablica_danych_parametrow_szablonu_strony_numer_kod)then
tablica_danych_parametrow_szablonu_strony_numer_kod.parametry=nil;
end;
end;
local wynik,tabela_parametrow_szablonu=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
local szablon_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
if(szablon_ce)then
local zawartosc=tabela_parametrow_szablonu[szablon_ce];
if((zawartosc)and(p.CzyJestNapisWprowadzeniaTekstu(zawartosc) or p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)))then
return zawartosc,tabela_parametrow_szablonu;
end;
end;
return nil,tabela_parametrow_szablonu;
end);
if(wynik)then return wynik;end;
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
return nil;
elseif(czy_center)then
local szablon_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
if(szablon_ce)then
local zawartosc=tabela_parametrow_szablonu[szablon_ce];
if((zawartosc)and(p.CzyJestNapisWprowadzeniaTekstu(zawartosc) or p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)))then
return zawartosc;
else
return nil;
end;
else
return nil;
end;
end;
local znacznik_numer=znaczniki_szablonowe[nazwa_szablonu];
if(znacznik_numer)then
local parametr=tabela_parametrow_szablonu[znacznik_numer];
if(parametr)then
return ZamienNaKody(parametr,true);
end;
end;
end;
local wynik=FuncSzablon(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow);
if(wynik)then return wynik,nil,true;end;
return nil,true;
elseif(obiekt=="ZNACZNIK")then
local nazwa,zawartosc,atrybuty=parametr1,parametr2,parametr3;
if((nazwa~="center")and(not znaczniki_wprowadzenia_tekstu[nazwa]))then
if((nazwa~="ref")and(nazwa~="br")and(nazwa~="hr"))then
local fun=function()
if(nazwa~="div")then
return zawartosc and ZamienNaKody(PrzetwarzanieZnacznikowe(zawartosc,true),false) or "";
elseif((zawartosc)and(zawartosc~=""))then
if(not p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(tekst,zawartosc,obiekt,kod))then
local ile1;local ile2;
zawartosc,ile1=mw.ustring.gsub(zawartosc,"^([^\n]+\n)",function(s)
if(not mw.ustring.match(s,"^%s*$"))then return PrzetwarzanieZnacznikowe(s,true).."\n\n";end;
return "\n";
end);
zawartosc,ile2=mw.ustring.gsub(zawartosc,"([^\n]+)$",function(s)
if(not mw.ustring.match(s,"^%s*$"))then return "\n\n"..s;end;
return "";
end);
return ZamienNaKody(zawartosc,false);
else
return zawartosc and ZamienNaKody(PrzetwarzanieZnacznikowe(zawartosc,true),false) or "";
end;
else
return "";
end;
end;
return fun,nil,true;
end;
else
if((zawartosc)and(p.CzyJestNapisWprowadzeniaTekstu(zawartosc) or p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)))then
return zawartosc,nil,true;
end;
local szablon,czy_center=UsuwanieZnacznikowe(szablon,obiekt,kod,nazwa,zawartosc,atrybuty);
if(szablon)then
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[100];
if(tablica_danych_parametrow_szablonu_strony_numer)then
tablica_danych_parametrow_szablonu_strony_numer[kod]=nil;
end;
end;
end;
return nil,true;
elseif(obiekt=="INNEPRE")then
if(mw.ustring.match(szablon,"^%s*$"))then
return "",nil,true;
end;
return nil,true;
elseif((obiekt=="LINKW")or(obiekt=="LINKZ"))then
local tak=false;
szablon=szablonowe_modul:KodowanieNiezakodowanychNormKodowychReferencjiTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false,function(szablon,obiekt,kod,parametr1,parametr2,parametr3)
if(obiekt=="ZNACZNIK")then
tak=true;
local nazwa,zawartosc,atrybuty=parametr1,parametr2,parametr3;
if((nazwa=="br")or(nazwa=="hr"))then
return " ",nil,true;
else
return zawartosc or "",nil,true;
end;
end;
return nil,true;
end);
if(tak)then
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
end;
local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=stronicowyparser_analizaaspisurzeczy_modul.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true);
if(not czy_element_spisu)then return "",nil,true;end;
elseif(obiekt=="WIKITABELA")then
szablon=mw.ustring.match(szablon,"^{|(.-)|}$");
szablon=mw.ustring.gsub(szablon,"^[^\n]+","");
--szablon=mw.ustring.gsub(szablon,"[|!][|!]","\n\n");
szablon=mw.ustring.gsub(szablon,"\n|[%-%+]?[^%S\n]*[^|\n]*|([^|\n]+)",function(komorka)
return PrzetwarzanieZnacznikowe(komorka);
end);
szablon=mw.ustring.gsub(szablon,"\n|%-([^|\n]+)",function(komorka)
return PrzetwarzanieZnacznikowe(komorka);
end);
szablon=mw.ustring.gsub(szablon,"\n|%-[^%S\n|]*","\n\n");
szablon=mw.ustring.gsub(szablon,"||([^|\n]+)",function(komorka)
return PrzetwarzanieZnacznikowe(komorka);
end)
szablon=mw.ustring.gsub(szablon,"\n|%+[^%S\n]*([^\n]+)",function(komorka)
return PrzetwarzanieZnacznikowe(komorka);
end);
szablon=mw.ustring.gsub(szablon,"\n|([^\n|]+)",function(komorka)
return PrzetwarzanieZnacznikowe(komorka);
end);
return szablon,nil,true;
end;
return nil,true;
end,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,nil,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE);
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)
tekst_rozwiniety_calego_artykulu=szeregi_modul.ZamianaZnakowaLinii(tekst_rozwiniety_calego_artykulu,function(linia)
local linia_nie_nil=mw.ustring.match(linia,wzor);
if(linia_nie_nil)then
local tak=nil;
local linia_tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_nie_nil,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod)
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
if((nazwa_szablonu=="Br")or(nazwa_szablonu=="Hr"))then
tak=true;
return " ";
end;
local szablon_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
if(szablon_ce)then
local tekst=tabela_parametrow_szablonu[szablon_ce];
if(tekst)then
tak=true;
return tekst;
end;
end;
end);
if(wynik)then return wynik,nil,true;end;
elseif(obiekt=="ZNACZNIK")then
local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod);
if((nazwa=="br")or(nazwa=="hr"))then
tak=true;
return " ",nil,true;
elseif((nazwa=="center")or(znaczniki_wprowadzenia_tekstu[nazwa]))then
tak=true;
return zawartosc or "",nil,true;
end;
elseif(obiekt=="PRE")then
local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeTaguPre(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod);
if(zawartosc)then
zawartosc=html_modul.ZnakiSpecjalneTaguNowiki(zawartosc);
if(czy_dodatni_rozdzial)then
local zawartosc=mw.ustring.gsub(zawartosc,"\n"," ");
tak=true;
return zawartosc,nil,true;
else
tak=true;
return zawartosc,nil,true;
end;
else
tak=true;
return "",nil,true;
end;
elseif(obiekt=="ŹRÓDŁO")then
local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeTaguSyntaxHighLight(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod);
if(zawartosc)then
zawartosc=html_modul.ZnakiSpecjalneTaguNowiki(zawartosc);
if(czy_dodatni_rozdzial)then
local zawartosc=mw.ustring.gsub(zawartosc,"\n"," ");
tak=true;
return zawartosc,nil,true;
else
tak=true;
return zawartosc,nil,true;
end;
else
tak=true;
return "",nil,true;
end;
elseif(obiekt=="NOWIKI")then
local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeTaguNowiki(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod);
if(zawartosc)then
zawartosc=html_modul.ZnakiSpecjalneTaguNowiki(zawartosc);
local zawartosc=mw.ustring.gsub(zawartosc,"\n"," ");
tak=true;
return zawartosc,nil,true;
else
tak=true;
return "",nil,true;
end;
end;
return nil,true;
end,nil,nil,nil,nil,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,nil,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE);
return linia_tekst;
else
return nil;
end;
end);
end;
-----
LiniaRozdzialyDodatnieOrazUjemne("^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$",true);
LiniaRozdzialyDodatnieOrazUjemne("^([%*#;:]+[^\n]*)$",false);
tekst_rozwiniety_calego_artykulu=szablonowe_modul:ModyfikowanieKodowoSzablonoweZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nil,tablica_analizy_obiektow_strony_dany_modul,
function(szablon,obiekt,kod,poziom_iteracji,szablon_rodzica,obiekt_rodzica,kod_rodzica,poziom_iteracji_rodzica)
if(obiekt=="SZABLON")then
return szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
if(szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu])then
return "\n\n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod).."\n\n ";
else
local numer_parametru=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu];
if(numer_parametru)then
local parametr=tabela_parametrow_szablonu[numer_parametru];
if(parametr)then
local naglowek=p.NapisWprowadzeniaTekstuHNumer(parametr);
if(naglowek)then
local obiekt_hnumer="ZNACZNIK";
local kod_hnumer=(#(tablica_analizy_obiektow_strony_dany_modul[obiekt_hnumer] or {}))+1;
return "\n\n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt_hnumer,kod_hnumer).."\n\n ",naglowek,obiekt_hnumer,kod_hnumer;
end;
end;
end;
end;
end);
elseif(obiekt=="ZNACZNIK")then
local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod);
if((nazwa=="center")or(znaczniki_wprowadzenia_tekstu[nazwa]))then
return "\n\n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod).."\n\n ";
end;
elseif(obiekt=="INNEPRE")then
return "\n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod).."\n";
elseif((obiekt=="PRE")or(obiekt=="ŹRÓDŁO")or(obiekt=="GALERIA")or(obiekt=="MAPAOBRAZU")or(obiekt=="PUDEŁKOWEJŚCIA"))then
return "\n\n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod).."\n\n ";
end;
end,nil,nil,nil,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE);
-----
end;
tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"<!%-%-.-%-%->","");
local tab_magiczne_derektywy=stronicowyparser_obiekty_modul.magiczne_derektywy;
tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"__(%u+)__",function(derektywy)
return tab_magiczne_derektywy[derektywy] and "" or nil;
end);
tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"^(%-%-%-%-+)[^%S\n]*([^\n]+)","%1\n %2");
tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"\n(%-%-%-%-+)[^%S\n]*([^\n]+)","\n%1\n %2");
--tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"\n\n","\n\n");
if(czy_dalej_rozwazac_zakodowane)then
----
tekst_rozwiniety_calego_artykulu=p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst_rozwiniety_calego_artykulu,nil,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE);
tekst_rozwiniety_calego_artykulu=__FUNKCJA_ANALIZA_SPISU and __FUNKCJA_ANALIZA_SPISU(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or tekst_rozwiniety_calego_artykulu;
end;
--mw.log( tekst_rozwiniety_calego_artykulu)
--local iter_main=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"\n([^\n]*)\n");
local iter_main=szeregi_modul.IteratorLiniiTekstu(tekst_rozwiniety_calego_artykulu);
local naglowek_aktualnego_rozdzialu;
local linia_naglowka_aktualnego_rozdzialu;
local poziom_aktualnego_rozdzialu;
local poczatek_aktualnego_rozdzialu;
local numeracja_aktualnego_rozdzialu;
local czy_rozdzial_aktualny_centrowany;
local czy_koniec=false;
----
local odczyt_jakie_spisy_tresci=stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu;
local jakie_spisy_tresci=parametry_modul["KopiujTabelęElementów"](odczyt_jakie_spisy_tresci);
setmetatable(jakie_spisy_tresci,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
local czy_ce_spis_tresci=nil;
----
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
local parser=p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
-----
local tak_ce_spis_tresci=nil;
local m=0;
local function Wystepowanie(linia,funkcja1,funkcja2)
local czy_znaleziono_okladka=false;
local function RozwazajLinie(szablon,obiekt,kod)
if(szablon)then
local tab_2,numer_rodzaju_artykulu,id,parametry,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,p.__FUNKCJA_KOMPLETOWANIA,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych);
if(not kom)then
local tab=((tab_2 and tab_2[1]) and tab_2 or nil);
if(tab)then
local artykul=stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false);
local czy_okladka=mw.ustring.match(artykul,stronicowyparser_obiekty_modul.artykularne_niespisowe[1]);
if((artykul~="")and((numer_rodzaju_artykulu~=1)or((numer_rodzaju_artykulu==1)and(not czy_okladka))))then
return 1;
elseif(czy_okladka)then
czy_znaleziono_okladka=true;
end;
end;
else
return 0;
end;
end;
end;
local function RozwazajLinieZnacznikowe(zawartosc)
local wartosc;
local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji,tekst)
local function CenterZnacznikLinia(szablon,obiekt,kod)
wartosc=RozwazajLinie(szablon,obiekt,kod);
if(not wartosc)then return;end;
if(wartosc==1)then return nil;end;
return szablon,tekst;
end;
if(obiekt=="SZABLON")then
local szablon,tekst=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
local szablon,tekst=CenterZnacznikLinia(szablon,obiekt,kod);
return szablon,tekst;
end);
return szablon,tekst;
elseif((obiekt=="LINKW")or(obiekt=="LINKZ"))then
local szablon,tekst=CenterZnacznikLinia(szablon,obiekt,kod);
return szablon,tekst;
end;
end);
for szablon,obiekt,kod in iter do end;
return wartosc;
end;
local szablon_spis_tresci;
local function spis_tresci(wystepowanie_linkow,hn_number)
local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(wystepowanie_linkow,nil,tablica_analizy_obiektow_strony_dany_modul);
for szablon,obiekt,kod in iter do
local function Spis(szablon,obiekt,kod)
local tab_2,numer_rodzaju_artykulu,id,parametry,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,p.__FUNKCJA_KOMPLETOWANIA,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych);
if(not kom)then
local tab=((tab_2 and tab_2[1]) and tab_2 or nil);
if((tab)and(numer_rodzaju_artykulu==1)and(stronicowyparser_analizaaspisurzeczy_modul.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false))))then
tak_ce_spis_tresci=hn_number;
szablon_spis_tresci=wystepowanie_linkow;
return 1;
end;
else
return 0;
end;
end;
if(obiekt=="SZABLON")then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
local wynik=Spis(szablon,obiekt,kod);
if(wynik)then return wynik;end;
end);
if(wynik)then return wynik;end;
elseif((obiekt=="LINKW")or(obiekt=="LINKZ"))then
local wynik=Spis(szablon,obiekt,kod);
if(wynik)then return wynik;end;
end;
end;
wystepowanie_linkow=czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(wystepowanie_linkow,nil,tablica_analizy_obiektow_strony_dany_modul) or wystepowanie_linkow;
wystepowanie_linkow=mw.text.trim(wystepowanie_linkow);
local czy_ce=jakie_spisy_tresci[wystepowanie_linkow];
if(czy_ce)then
tak_ce_spis_tresci=hn_number;
szablon_spis_tresci=wystepowanie_linkow;
return 1;
end;
end;
local wystepowanie_linkow=mw.ustring.match(linia,"^[#:%*;%d%.>]+%s*(.+)$") or mw.ustring.match(linia,"^(%S+%s*.+)$");
local tak=nil;
if(czy_dalej_rozwazac_zakodowane)then
if(wystepowanie_linkow)then
local czy_rozdzial=nil;local wartosc=nil;
local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(wystepowanie_linkow,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji,tekst)
local czy_linkw=(obiekt=="LINKW");local czy_linkz=(obiekt=="LINKZ");local czy_szablon=(obiekt=="SZABLON");local czy_znacznik=(obiekt=="ZNACZNIK");
if(czy_linkw or czy_linkz or czy_szablon or czy_znacznik)then
local podrecznik=nil;
if(czy_szablon)then
local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
-----
local czy_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
if(czy_ce)then
local szablon_spis_tresci_zawartosc=tabela_parametrow_szablonu[czy_ce];
if(szablon_spis_tresci_zawartosc)then
szablon_spis_tresci_zawartosc=mw.ustring.match(szablon_spis_tresci_zawartosc,"^'*%s*(.-)%s*'*$");
wartosc=spis_tresci(szablon_spis_tresci_zawartosc,true);
else
wartosc=RozwazajLinie(szablon,obiekt,kod);
end;
else
wartosc=RozwazajLinie(szablon,obiekt,kod);
if(wartosc)then podrecznik=true;else podrecznik=false;end;
end;
end);
elseif(czy_znacznik)then
local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod);
if(zawartosc)then
if(nazwa=="center")then
szablon_spis_tresci=mw.ustring.match(zawartosc,"^'*%s*(.-)%s*'*$");
wartosc=spis_tresci(szablon_spis_tresci,true);
elseif(znaczniki_wprowadzenia_tekstu[nazwa])then
szablon_spis_tresci=mw.ustring.match(zawartosc,"^'*%s*(.-)%s*'*$");
local hn_number=p.HnNumerWprowadzeniaTekstu(nazwa,atrybuty)
wartosc=spis_tresci(szablon_spis_tresci,hn_number);
else
wartosc=RozwazajLinieZnacznikowe(zawartosc);
end;
end;
else
wartosc=RozwazajLinie(szablon,obiekt,kod);
if(wartosc)then podrecznik=true;else podrecznik=false;end;
end;
if(podrecznik==true)then
if(not czy_rozdzial)then
if(wartosc==1)then
local wystepowanie_linku_lub_szablonu=(mw.ustring.match(tekst,"^'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)))
and(not mw.ustring.match(tekst,"^'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."%s*>"))
and (mw.ustring.match(tekst,"^[^%.]*%s*$"));
if(not wystepowanie_linku_lub_szablonu)then return nil;end;
czy_rozdzial=true;
elseif(wartosc==0)then
local ile;
tekst,ile=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod),"");
return "", ((ile>0) and tekst or nil);
end;
end;
elseif(podrecznik==false)then
if(not wartosc)then
if(czy_znaleziono_okladka)then
local czy_nie_uwzgledniac_linii=mw.ustring.match(tekst,"[%s%p]*<[%s<]-%s*'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod));
if(not czy_nie_uwzgledniac_linii)then
local tekst,ile=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod),"");
return "", ((ile>0) and tekst or nil);
else
czy_znaleziono_okladka=false;
end;
else
local tekst,ile=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod),"");
return "", ((ile>0) and tekst or nil);
end;
end;
end;
if(not wartosc)then return;end;
tak=tak or (wartosc==1);
if(tak)then return;end;
return szablon,tekst;
else
local tekst,ile=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod),"");
return "", ((ile>0) and tekst or nil);
end;
end);
for szablon,obiekt,kod in iter do end;
end;
end;
if(tak)then
funkcja1(szablon_spis_tresci);
else
funkcja2();
end;
end
return function()
local tab_str={};
local linia;
local function IterMain()
for linia in iter_main do
local nazwa_rozdzialu;local poziom_rozdzialu;local poczatek_rozdzialu;local numeracja_rozdzialu;local czy_rozdzial_centrowany;
---------------------------------------
nazwa_rozdzialu=mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$");
if(nazwa_rozdzialu) then
nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomuWprowadzeniaTekstu(nazwa_rozdzialu);
end;
if(not nazwa_rozdzialu)then
if(czy_rozdzialy_analizowac)then
if(not czy_w_spisie_tresci)then
Wystepowanie(linia,function(szablon_spis_tresci)
if(not tak_ce_spis_tresci)then
nazwa_rozdzialu="Spis treści";
poziom_rozdzialu=nil;
table.insert(tab_str,linia);
else
if(szablon_spis_tresci)then
local numeracja,rozdzial=p.NumeracjaOrazTekstWprowadzeniaTekstu(szablon_spis_tresci);
if((numeracja)and(rozdzial))then
numeracja_rozdzialu=numeracja;
nazwa_rozdzialu=rozdzial;
else
nazwa_rozdzialu=szablon_spis_tresci;
numeracja_rozdzialu=nil;
end;
else
nazwa_rozdzialu="Spis treści";
numeracja_rozdzialu=nil;
end;
local czy_rozdzial_naglowka_hn=tonumber(tak_ce_spis_tresci);
poziom_rozdzialu=czy_rozdzial_naglowka_hn or 2;
czy_rozdzial_centrowany=(not czy_rozdzial_naglowka_hn)and true or false;
poczatek_rozdzialu=nil;
--str="";
end;
end,function()
nazwa_rozdzialu=nil;
end);
end;
if(not nazwa_rozdzialu)then
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
end;
else
nazwa_rozdzialu=nil;
end;
end;
if(nazwa_rozdzialu)then
czy_w_spisie_tresci=true;
if(not naglowek_aktualnego_rozdzialu)then
naglowek_aktualnego_rozdzialu=nazwa_rozdzialu;
linia_naglowka_aktualnego_rozdzialu=linia;
poziom_aktualnego_rozdzialu=poziom_rozdzialu;
poczatek_aktualnego_rozdzialu=poczatek_rozdzialu;
numeracja_aktualnego_rozdzialu=numeracja_rozdzialu;
czy_rozdzial_aktualny_centrowany=czy_rozdzial_centrowany;
else
----------------------------------------------
local naglowek_posredni_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu;
local linia_naglowka_posredni_aktualnego_rozdzialu=linia_naglowka_aktualnego_rozdzialu;
local poziom_posredni_aktualnego_rozdzialu=poziom_aktualnego_rozdzialu;
local poczatek_posredni_aktualnego_rozdzialu=poczatek_aktualnego_rozdzialu;
local numeracja_posredni_aktualnego_rozdzialu=numeracja_aktualnego_rozdzialu;
local czy_rozdzial_posredni_centrowany=czy_rozdzial_aktualny_centrowany;
----------------------------------------------
naglowek_aktualnego_rozdzialu=nazwa_rozdzialu;
linia_naglowka_aktualnego_rozdzialu=linia;
poziom_aktualnego_rozdzialu=poziom_rozdzialu;
poczatek_aktualnego_rozdzialu=poczatek_rozdzialu;
numeracja_aktualnego_rozdzialu=numeracja_rozdzialu;
czy_rozdzial_aktualny_centrowany=czy_rozdzial_centrowany;
local str=table.concat(tab_str,"\n");
if(not __FUNKCJA2)then
naglowek_posredni_aktualnego_rozdzialu=naglowek_posredni_aktualnego_rozdzialu
and (czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(naglowek_posredni_aktualnego_rozdzialu,nil,tablica_analizy_obiektow_strony_dany_modul)
or naglowek_posredni_aktualnego_rozdzialu
)
or nil;
str=str and (czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(str,nil,tablica_analizy_obiektow_strony_dany_modul) or str) or nil;
elseif(czy_dalej_rozwazac_zakodowane)then
naglowek_posredni_aktualnego_rozdzialu=naglowek_posredni_aktualnego_rozdzialu and __FUNKCJA2(naglowek_posredni_aktualnego_rozdzialu,nil,tablica_analizy_obiektow_strony_dany_modul,true) or nil;
str=str and __FUNKCJA2(str,nil,tablica_analizy_obiektow_strony_dany_modul,false) or nil;
end;
--linia_poprz=nil;
m=m+1;
return {naglowek_posredni_aktualnego_rozdzialu,linia_naglowka_posredni_aktualnego_rozdzialu,},str,poziom_posredni_aktualnego_rozdzialu,poczatek_posredni_aktualnego_rozdzialu,numeracja_posredni_aktualnego_rozdzialu,czy_rozdzial_posredni_centrowany;
end;
else
if(naglowek_aktualnego_rozdzialu)then
table.insert(tab_str,linia);
end;
--linia_poprz=linia;
end;
end;
if(czy_koniec)then return nil;end;
czy_koniec=true;
---
local str=table.concat(tab_str,"\n");
--
if(not __FUNKCJA2)then
naglowek_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu
and (czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(naglowek_aktualnego_rozdzialu,nil,tablica_analizy_obiektow_strony_dany_modul)
or naglowek_aktualnego_rozdzialu
)
or nil;
str=str and (czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(str,nil,tablica_analizy_obiektow_strony_dany_modul) or str) or nil;
elseif(czy_dalej_rozwazac_zakodowane)then
naglowek_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu and __FUNKCJA2(naglowek_aktualnego_rozdzialu,nil,tablica_analizy_obiektow_strony_dany_modul,true) or nil;
str=str and __FUNKCJA2(str,nil,tablica_analizy_obiektow_strony_dany_modul,false) or nil;
end;
--linia_nast=nil;linia_poprz=nil;
m=m+1;
return (naglowek_aktualnego_rozdzialu and {naglowek_aktualnego_rozdzialu,linia_naglowka_aktualnego_rozdzialu,} or nil),str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
----
local naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany=IterMain();
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end,tekst_rozwiniety_calego_artykulu;
end;
return p;
2hd9t4s0n9uiv6r3qaxpo0zwv6l32xu
Szablon:NawigacjaSpecjalna/Nawigacja/Pomoc:Spis treści
10
61114
551279
546366
2026-08-10T19:54:46Z
Persino
2851
551279
wikitext
text/x-wiki
<includeonly>{{Układ autonawigacji|krok={{{1}}}
|automat manualny=tak
|spis treści=Pomoc:Spis treści
|Pomoc:Spis treści|Pomoc - Spis treści
|Pomoc:Spis treści/Wstęp|Wstęp
|Wikibooks:Witamy nowicjuszy|Witamy nowicjuszy
|Wikibooks:Zasady i wskazówki|Zasady i wskazówki
|Wikibooks:Szybka pomoc|Szybka pomoc
|Wikibooks:Czym jest Wikibooks|Czym jest Wikibooks?
|Wikibooks:Różnice między Wikipedią i Wikibooks|Różnice między Wikipedią i Wikibooks
|Wikibooks:Dlaczego warto rozpocząć współpracę|Dlaczego warto rozpocząć współpracę?
|Wikibooks:Dlaczego używać wolnych podręczników|Dlaczego używać wolnych podręczników?
|Wikibooks:Dlaczego nie pisać na Wikibooks|Dlaczego nie pisać na Wikibooks?
|Wikibooks:Wikietykieta|Wikietykieta
|Pomoc:Wikietykieta|Wikietykieta
|Wikibooks:Neutralny punkt widzenia|Neutralny punkt widzenia
|Pomoc:Żargon użytkowników|Żargon użytkowników
|Wikibooks:Informacje prawne|Informacje prawne
|Wikibooks:Prawa autorskie|Prawa autorskie
|Pomoc:Spis treści/Edycja|Edycja
|Wikibooks:Brudnopis|Brudnopis
|Pomoc:Edycja kodu|Edycja kodu
|Wikibooks:Import stron|Import stron
|Wikibooks:Etapy rozwoju książek|Etapy rozwoju książek
|Wikibooks:Ilustracja Wikibooks|Ilustracja Wikibooks
|Pomoc:Jak edytować artykuły|Jak edytować artykuły?
|Wikibooks:Nazewnictwo artykułów|Nazewnictwo artykułów
|Pomoc:Podświetlanie składni|Podświetlanie składni
|Pomoc:Problemy z polskimi znakami|Problemy z polskimi znakami
|Pomoc:Quiz|Quiz
|Pomoc:Tworzenie podręcznika|Tworzenie podręcznika
|Wikibooks:Wandalizm|Wandalizm
|Wikibooks:Podręczniki do druku|Podręczniki do druku
|Pomoc:Tworzenie wersji do druku|Tworzenie wersji do druku
|Pomoc:Tworzenie wersji PDF|Tworzenie wersji PDF
|Pomoc:Tworzenie wersji PDF/javaLatex|Tworzenie wersji PDF/javaLatex
|Pomoc:Książki|Książki
|Pomoc:Spis treści/Wkład miesiąca|Wkład miesiąca
|Wikibooks:Wkład miesiąca/Aktualne głosowanie|Aktualne głosowanie
|Wikibooks:Wkład miesiąca/Wstęp|Wstęp
|Wikibooks:Wkład miesiąca/Regulamin|Regulamin
|Wikibooks:Wkład miesiąca/Nominacje|Nominacje
|Pomoc:Spis treści/Komunikacja|Komunikacja
|Wikibooks:Kanał IRC|Kanał IRC
|Wikibooks:Kontakt|Kontakt
|Wikibooks:Portal użytkowników|Portal użytkowników
|Pomoc:Archiwizowanie strony dyskusji|Archiwizowanie strony dyskusji
|Wikibooks:Przedstawicielstwo dyplomatyczne|Przedstawicielstwo dyplomatyczne
|Pomoc:Spis treści/Korzystanie z Wikibooks|Korzystanie z Wikibooks
|Wikibooks:Jak przeglądać Wikibooks|Jak przeglądać Wikibooks?
|Wikibooks:Księgozbiór|Księgozbiór
|Wikibooks:Księgozbiór/Wybrane|Księgozbiór - Wybrane
|Wikibooks:Księgozbiór/Alfabetycznie|Księgozbiór - Alfabetycznie
|Wikibooks:Księgozbiór/Tematycznie|Księgozbiór - Tematycznie
|Wikibooks:Księgozbiór/Poziom|Księgozbiór - Poziom
|Wikibooks:Księgozbiór/Status|Księgozbiór - Status
|Portal:Nauki ścisłe i przyrodnicze|Portal - Nauki ścisłe i przyrodnicze
|Portal:Informatyka|Portal - Informatyka
|Portal:Nauki techniczne|Portal - Nauki techniczne
|Portal:Nauki społeczne i humanistyczne|Portal - Nauki społeczne i humanistyczne
|Portal:Sport i rozrywka|Portal - Sport i rozrywka
|Portal:Hobby, poradniki i książki różne|Portal - Hobby, poradniki i książki różne
|Wikibooks:Promocja|Promocja
|Pomoc:Tryb ciemny|Tryb ciemny
|Pomoc:Spis treści/Historia Wikibooks|Historia Wikibooks
|Wikibooks:Historia Wikibooks|Historia Wikibooks
|Wikibooks:Piąte urodziny|Piąte urodziny
|Wikibooks:6. urodziny polskich Wikibooks|6. urodziny polskich Wikibooks
|Wikibooks:Wikikalendarz 2009|Wikikalendarz 2009
|Wikibooks:Sprzątanie Wikibooks|Sprzątanie Wikibooks
|Wikibooks:Sprzątanie Wikibooks/2009|Sprzątanie Wikibooks - 2009
|Wikibooks:Sprzątanie Wikibooks/2011|Sprzątanie Wikibooks - 2011
|Wikibooks:Statystyki|Statystyki
|Pomoc:Spis treści/Technikalia|Technikalia
|Wikibooks:Przestrzenie nazw|Przestrzenie nazw
|Wikibooks:Poczekalnia|Poczekalnia
|Wikibooks:Poczekalnia/naprawa|Poczekalnia - Naprawa
|Wikibooks:Poczekalnia/prowokacje|Poczekalnia - Prowokacje
|Wikibooks:Poczekalnia/artykuły|Poczekalnia - Artykuły
|Wikibooks:Poczekalnia/kwestie techniczne|Poczekalnia - Kwestie techniczne
|Wikibooks:Poczekalnia/Zgłoszenia|Poczekalnia - Zgłoszenia
|Wikibooks:Poczekalnia/Załatwione|Poczekalnia - Załatwione
|Wikibooks:VisualEditor|VisualEditor
|Pomoc:Nowa skórka – wektor|Nowa skórka – wektor
|Wikibooks:Skróty|Skróty
|Pomoc:Spis treści/Strona główna|Strona główna
|Pomoc:Spis treści/Wybrane książki|Wybrane książki
|Wikibooks:Mechanizm MediaWiki|Mechanizm MediaWiki
|Wikibooks:Szablony|Mechanizm MediaWiki - Szablony
|Wikibooks:Moduły|Mechanizm MediaWiki - Moduły
|Wikibooks:Moduły/Parametry|Moduł:Parametry
|Wikibooks:Moduły/Html|Moduł:Html
|Wikibooks:Moduły/Książkowe|Moduł:Książkowe
|Wikibooks:Moduły/Nazwy|Moduł:Nazwy
|Wikibooks:Moduły/Nazwy/Tom I|Moduł:Nazwy - Tom I
|Wikibooks:Moduły/Nazwy/Tom II|Moduł:Nazwy - Tom II
|Wikibooks:Moduły/Nazwy/Tom III|Moduł:Nazwy - Tom III
|Wikibooks:Moduły/Nazwy/Tom IV|Moduł:Nazwy - Tom IV
|Wikibooks:Moduły/Nazwy/Np|Moduł:Nazwy - Np
|Wikibooks:Moduły/Pudełko|Moduł:Pudełko
|Wikibooks:Moduły/Pudełko/Tom I|Moduł:Pudełko - Tom I
|Wikibooks:Moduły/Pudełko/Tom II|Moduł:Pudełko - Tom II
|Wikibooks:Moduły/Pudełko/Tom III|Moduł:Pudełko - Tom III
|Wikibooks:Moduły/Pudełko/Tom IV|Moduł:Pudełko - Tom IV
|Wikibooks:Moduły/Pudełko/Tom V|Moduł:Pudełko - Tom V
|Wikibooks:Moduły/Pudełko/Pomocne|Moduł:Pudełko - Pomocne
|Wikibooks:Moduły/Pudełko/Potrzebne|Moduł:Pudełko - Potrzebne
|Wikibooks:Moduły/Pudełko/ParametryCechy|Moduł:Pudełko - Parametry Cechy
|Wikibooks:Moduły/Ramka|Moduł:Ramka
|Wikibooks:Moduły/Specjalne|Moduł:Specjalne
|Wikibooks:Moduły/StronicowyParser|StronicowyParser
|Wikibooks:Moduły/StronicowyParser/Tom I|StronicowyParser - Tom I
|Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy|StronicowyParser - AnalizaSpisuRzeczy
|Wikibooks:Moduły/StronicowyParser/GłównaFunkcjaZbieraniaDanychStron|StronicowyParser - GłównaFunkcjaZbieraniaDanychStron
|Wikibooks:Moduły/StronicowyParser/Kategorie|StronicowyParser - Kategorie
|Wikibooks:Moduły/StronicowyParser/NumerLubNazwaArtykułówKsiążek|StronicowyParser - NumerLubNazwaArtykułówKsiążek
|Wikibooks:Moduły/StronicowyParser/NumerLubNazwaNagłówkówKsiążek|StronicowyParser - NumerLubNazwaNagłówkówKsiążek
|Wikibooks:Moduły/StronicowyParser/NumerObiektu|StronicowyParser - NumerObiektu
|Wikibooks:Moduły/StronicowyParser/NumeracjaObiektówStron|StronicowyParser - NumeracjaObiektówStron
|Wikibooks:Moduły/StronicowyParser/Potrzebne|StronicowyParser - Potrzebne
|Wikibooks:Moduły/StronicowyParser/Problemy|StronicowyParser - Problemy
|Wikibooks:Moduły/StronicowyParser/Rozdziały|StronicowyParser - Rozdziały
|Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom I|StronicowyParser - Rozdziały - Tom I
|Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom II|StronicowyParser - Rozdziały - Tom II
|Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom III|StronicowyParser - Rozdziały - Tom III
|Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom IV|StronicowyParser - Rozdziały - Tom IV
|Wikibooks:Moduły/StronicowyParser/SpisTreści|StronicowyParser - SpisTreści
|Wikibooks:Moduły/StronicowyParser/SpisTreści/Tom I|StronicowyParser - SpisTreści - Tom I
|Wikibooks:Moduły/StronicowyParser/SpisTreści/Tom II|StronicowyParser - SpisTreści - Tom II
|Wikibooks:Moduły/StronicowyParser/StronaSubst|StronicowyParser - StronaSubst
|Wikibooks:Moduły/StronicowyParser/Tekst|StronicowyParser - Tekst
|Wikibooks:Moduły/StronicowyParser/ZbieranieDanychStron|StronicowyParser - ZbieranieDanychStron
|Wikibooks:Moduły/StronicowyParser/SzablonyTekstu|StronicowyParser - SzablonyTekstu
|Wikibooks:Moduły/StronicowyParser/informacje|StronicowyParser - informacje
|Wikibooks:Moduły/StronicowyParser/obiekty|StronicowyParser - obiekty
|Wikibooks:Moduły/Szeregi|Moduł:Szeregi
|Wikibooks:Moduły/Skrót|Moduł:Skrót
|Wikibooks:Moduły/Strony|Moduł:Strony
|Wikibooks:Moduły/Sekcja referencyjna|Moduł:Sekcja referencyjna
|Wikibooks:Szablony/Ogólne|Szablony - Ogólne
|Wikibooks:Szablony/Informacje|Szablony - Informacje
|Wikibooks:Szablony/PrzypisStrona|PrzypisStrona
|Wikibooks:Szablony/Podręcznikowe|Szablony - Podręcznikowe
|Wikibooks:Szablony/Książkowe|Szablony - Książkowe
|Wikibooks:Szablony/Tekst|Szablony - Tekst
|Wikibooks:Szablony/Zawartość|Szablony - Zawartość
|Wikibooks:Szablony/Nagłówki|Szablony - Nagłówki
|Wikibooks:Szablony/Przekierowania|Szablony - Przekierowania
|Wikibooks:Szablony/Języki|Szablony - Języki
|Wikibooks:Szablony/Liczby|Szablony - Liczby
|Wikibooks:Szablony/Kategorie|Szablony - Kategorie
|Wikibooks:Szablony/Opisy|Szablony - Opisy
|Wikibooks:Szablony/Znaczniki|Szablony - Znaczniki
|Wikibooks:Szablony/Szablony opływania|Szablony opływania
|Wikibooks:Szablony/Stronicowe|Szablony - Stronicowe
|Wikibooks:Szablony/Kontenerowe|Szablony - Kontenerowe
|Wikibooks:Szablony/Elastyczne|Szablony - Elastyczne
|Wikibooks:Szablony/Infoboksy/Prolog|Szablony - Infoboksy - Prolog
|Wikibooks:Szablony/Infoboksy/Tom I|Szablony - Infoboksy - Tom I
|Wikibooks:Szablony/Infoboksy/Tom II|Szablony - Infoboksy - Tom II
|Wikibooks:Szablony/Infoboksy/Tom III|Szablony - Infoboksy - Tom III
|Wikibooks:Szablony/Infoboksy/Tom IV|Szablony - Infoboksy - Tom IV
|Wikibooks:Szablony/Infoboksy/Tom V|Szablony - Infoboksy - Tom V
|Wikibooks:Szablony/Infoboksy/Tom VI|Szablony - Infoboksy - Tom VI
|Wikibooks:Szablony/Infoboksy/Komponenty|Szablony - Infoboksy - Komponenty
|Wikibooks:Szablony/Infoboksy/Komponenty (organizmy żywe)|Infoboksy - Komponenty (organizmy żywe)
|Wikibooks:Szablony/Porządkowe|Szablony - Porządkowe
|Wikibooks:Szablony/Źródła artykułów|Szablony - Źródła artykułów
|Wikibooks:Szablony/Linki|Szablony - Linki
|Wikibooks:Szablony/Linki inteligentne|Szablony - Linki inteligentne
|Wikibooks:Szablony/Do usunięcia|Szablony - Do usunięcia
|Wikibooks:Szablony/Nawigacja|Szablony - Nawigacja
|Wikibooks:Szablony/Media|Szablony - Media
|Wikibooks:Szablony/Grafika|Szablony - Grafika
|Wikibooks:Szablony/Licencjonowanie|Szablony - Licencjonowanie
|Wikibooks:Szablony/Techniczne|Szablony - Techniczne
|Wikibooks:Szablony/Wikipedysta|Szablony - Wikipedysta
|Wikibooks:Szablony/Dyskusja Wikipedysty|Szablony - Dyskusja Wikipedysty
|Wikibooks:Szablony/MediaWiki|Szablony - MediaWiki
|Wikibooks:Szablony/Systemowe|Szablony - Systemowe
|Pomoc:Spis treści/Szablony/Tom I|Szablony - Tom I
|Pomoc:Spis treści/Szablony/Tom II|Szablony - Tom II
|Pomoc:Spis treści/Szablony/Tom III|Szablony - Tom III
|Pomoc:Spis treści/Szablony/Tom IV|Szablony - Tom IV
|Pomoc:Spis treści/Administracja|Administracja
|Wikibooks:Kwestie techniczne|Kwestie techniczne
|Wikibooks:Wikipedyści potrzebujący pomocy|Wikipedyści potrzebujący pomocy
|Wikibooks:Zgłoś błąd (ZB)|Zgłoś błąd (ZB)
|Wikibooks:Lista Naruszeń Praw Autorskich (NPA)|Lista Naruszeń Praw Autorskich (NPA)
|Wikibooks:Administratorzy|Administratorzy
|Wikibooks:Prośby do administratorów|Prośby do administratorów
|Wikibooks:Administratorzy interfejsu|Administratorzy interfejsu
|Wikibooks:Prośby do administratorów interfejsu|Prośby do administratorów interfejsu
|Wikibooks:Biurokraci|Biurokraci
|Wikibooks:Boty|Boty
|Wikibooks:Stewardzi|Stewardzi
|Wikibooks:Użytkownicy|Użytkownicy
|Wikibooks:Automatycznie zatwierdzeni użytkownicy|Automatycznie zatwierdzeni użytkownicy
|Wikibooks:Zatwierdzeni użytkownicy|Zatwierdzeni użytkownicy
|Wikibooks:Przyznawanie uprawnień|Przyznawanie uprawnień
|Wikibooks:Nazwa użytkownika|Nazwa użytkownika
|Wikibooks:Prośby o zmianę nazwy użytkownika|Prośby o zmianę nazwy użytkownika
|Wikibooks:Uprawnieni do logowania się z zablokowanych adresów IP|Uprawnieni do logowania się z zablokowanych adresów IP
|Wikibooks:GNU Free Documentation License|GNU Free Documentation License
}}</includeonly><noinclude>{{Dokumentacja|zawartość=Szablon manualny (ręczny), nie automatyczny, bo ustawiony za pomocą {{Parametr|automat manualny|tak}}, wskazujący poprzedni i następny artykuł pomocy oraz ich stronę główną, czyli spis po {{LinkPomoc2|Spis treści}}.}}{{Kategoria|Szablony nawigacyjne układu autonawigacji do autonawigacji podręczników}}</noinclude>
qljcv7pwcyq9ri2vfi4m9a6k1kae9ap
551321
551279
2026-08-10T23:58:27Z
Persino
2851
551321
wikitext
text/x-wiki
<includeonly>{{Układ autonawigacji|krok={{{1}}}
|automat manualny=tak
|spis treści=Pomoc:Spis treści
|Pomoc:Spis treści|Pomoc - Spis treści
|Pomoc:Spis treści/Wstęp|Wstęp
|Wikibooks:Witamy nowicjuszy|Witamy nowicjuszy
|Wikibooks:Zasady i wskazówki|Zasady i wskazówki
|Wikibooks:Szybka pomoc|Szybka pomoc
|Wikibooks:Czym jest Wikibooks|Czym jest Wikibooks?
|Wikibooks:Różnice między Wikipedią i Wikibooks|Różnice między Wikipedią i Wikibooks
|Wikibooks:Dlaczego warto rozpocząć współpracę|Dlaczego warto rozpocząć współpracę?
|Wikibooks:Dlaczego używać wolnych podręczników|Dlaczego używać wolnych podręczników?
|Wikibooks:Dlaczego nie pisać na Wikibooks|Dlaczego nie pisać na Wikibooks?
|Wikibooks:Wikietykieta|Wikietykieta
|Pomoc:Wikietykieta|Wikietykieta
|Wikibooks:Neutralny punkt widzenia|Neutralny punkt widzenia
|Pomoc:Żargon użytkowników|Żargon użytkowników
|Wikibooks:Informacje prawne|Informacje prawne
|Wikibooks:Prawa autorskie|Prawa autorskie
|Pomoc:Spis treści/Edycja|Edycja
|Wikibooks:Brudnopis|Brudnopis
|Pomoc:Edycja kodu|Edycja kodu
|Wikibooks:Import stron|Import stron
|Wikibooks:Etapy rozwoju książek|Etapy rozwoju książek
|Wikibooks:Ilustracja Wikibooks|Ilustracja Wikibooks
|Pomoc:Jak edytować artykuły|Jak edytować artykuły?
|Wikibooks:Nazewnictwo artykułów|Nazewnictwo artykułów
|Pomoc:Podświetlanie składni|Podświetlanie składni
|Pomoc:Problemy z polskimi znakami|Problemy z polskimi znakami
|Pomoc:Quiz|Quiz
|Pomoc:Tworzenie podręcznika|Tworzenie podręcznika
|Wikibooks:Wandalizm|Wandalizm
|Wikibooks:Podręczniki do druku|Podręczniki do druku
|Pomoc:Tworzenie wersji do druku|Tworzenie wersji do druku
|Pomoc:Tworzenie wersji PDF|Tworzenie wersji PDF
|Pomoc:Tworzenie wersji PDF/javaLatex|Tworzenie wersji PDF/javaLatex
|Pomoc:Książki|Książki
|Pomoc:Spis treści/Wkład miesiąca|Wkład miesiąca
|Wikibooks:Wkład miesiąca/Aktualne głosowanie|Aktualne głosowanie
|Wikibooks:Wkład miesiąca/Wstęp|Wstęp
|Wikibooks:Wkład miesiąca/Regulamin|Regulamin
|Wikibooks:Wkład miesiąca/Nominacje|Nominacje
|Pomoc:Spis treści/Komunikacja|Komunikacja
|Wikibooks:Kanał IRC|Kanał IRC
|Wikibooks:Kontakt|Kontakt
|Wikibooks:Portal użytkowników|Portal użytkowników
|Pomoc:Archiwizowanie strony dyskusji|Archiwizowanie strony dyskusji
|Wikibooks:Przedstawicielstwo dyplomatyczne|Przedstawicielstwo dyplomatyczne
|Pomoc:Spis treści/Korzystanie z Wikibooks|Korzystanie z Wikibooks
|Wikibooks:Jak przeglądać Wikibooks|Jak przeglądać Wikibooks?
|Wikibooks:Księgozbiór|Księgozbiór
|Wikibooks:Księgozbiór/Wybrane|Księgozbiór - Wybrane
|Wikibooks:Księgozbiór/Alfabetycznie|Księgozbiór - Alfabetycznie
|Wikibooks:Księgozbiór/Tematycznie|Księgozbiór - Tematycznie
|Wikibooks:Księgozbiór/Poziom|Księgozbiór - Poziom
|Wikibooks:Księgozbiór/Status|Księgozbiór - Status
|Portal:Nauki ścisłe i przyrodnicze|Portal - Nauki ścisłe i przyrodnicze
|Portal:Informatyka|Portal - Informatyka
|Portal:Nauki techniczne|Portal - Nauki techniczne
|Portal:Nauki społeczne i humanistyczne|Portal - Nauki społeczne i humanistyczne
|Portal:Sport i rozrywka|Portal - Sport i rozrywka
|Portal:Hobby, poradniki i książki różne|Portal - Hobby, poradniki i książki różne
|Wikibooks:Promocja|Promocja
|Pomoc:Tryb ciemny|Tryb ciemny
|Pomoc:Spis treści/Historia Wikibooks|Historia Wikibooks
|Wikibooks:Historia Wikibooks|Historia Wikibooks
|Wikibooks:Piąte urodziny|Piąte urodziny
|Wikibooks:6. urodziny polskich Wikibooks|6. urodziny polskich Wikibooks
|Wikibooks:Wikikalendarz 2009|Wikikalendarz 2009
|Wikibooks:Sprzątanie Wikibooks|Sprzątanie Wikibooks
|Wikibooks:Sprzątanie Wikibooks/2009|Sprzątanie Wikibooks - 2009
|Wikibooks:Sprzątanie Wikibooks/2011|Sprzątanie Wikibooks - 2011
|Wikibooks:Statystyki|Statystyki
|Pomoc:Spis treści/Technikalia|Technikalia
|Wikibooks:Przestrzenie nazw|Przestrzenie nazw
|Wikibooks:Poczekalnia|Poczekalnia
|Wikibooks:Poczekalnia/naprawa|Poczekalnia - Naprawa
|Wikibooks:Poczekalnia/prowokacje|Poczekalnia - Prowokacje
|Wikibooks:Poczekalnia/artykuły|Poczekalnia - Artykuły
|Wikibooks:Poczekalnia/kwestie techniczne|Poczekalnia - Kwestie techniczne
|Wikibooks:Poczekalnia/Zgłoszenia|Poczekalnia - Zgłoszenia
|Wikibooks:Poczekalnia/Załatwione|Poczekalnia - Załatwione
|Wikibooks:VisualEditor|VisualEditor
|Pomoc:Nowa skórka – wektor|Nowa skórka – wektor
|Wikibooks:Skróty|Skróty
|Pomoc:Spis treści/Strona główna|Strona główna
|Pomoc:Spis treści/Wybrane książki|Wybrane książki
|Wikibooks:Mechanizm MediaWiki|Mechanizm MediaWiki
|Wikibooks:Szablony|Mechanizm MediaWiki - Szablony
|Wikibooks:Moduły|Mechanizm MediaWiki - Moduły
|Wikibooks:Moduły/Parametry|Moduł:Parametry
|Wikibooks:Moduły/Html|Moduł:Html
|Wikibooks:Moduły/Książkowe|Moduł:Książkowe
|Wikibooks:Moduły/Nazwy|Moduł:Nazwy
|Wikibooks:Moduły/Nazwy/Tom I|Moduł:Nazwy - Tom I
|Wikibooks:Moduły/Nazwy/Tom II|Moduł:Nazwy - Tom II
|Wikibooks:Moduły/Nazwy/Tom III|Moduł:Nazwy - Tom III
|Wikibooks:Moduły/Nazwy/Tom IV|Moduł:Nazwy - Tom IV
|Wikibooks:Moduły/Nazwy/Np|Moduł:Nazwy - Np
|Wikibooks:Moduły/Pudełko|Moduł:Pudełko
|Wikibooks:Moduły/Pudełko/Tom I|Moduł:Pudełko - Tom I
|Wikibooks:Moduły/Pudełko/Tom II|Moduł:Pudełko - Tom II
|Wikibooks:Moduły/Pudełko/Tom III|Moduł:Pudełko - Tom III
|Wikibooks:Moduły/Pudełko/Tom IV|Moduł:Pudełko - Tom IV
|Wikibooks:Moduły/Pudełko/Tom V|Moduł:Pudełko - Tom V
|Wikibooks:Moduły/Pudełko/Pomocne|Moduł:Pudełko - Pomocne
|Wikibooks:Moduły/Pudełko/Potrzebne|Moduł:Pudełko - Potrzebne
|Wikibooks:Moduły/Pudełko/ParametryCechy|Moduł:Pudełko - Parametry Cechy
|Wikibooks:Moduły/Ramka|Moduł:Ramka
|Wikibooks:Moduły/Specjalne|Moduł:Specjalne
|Wikibooks:Moduły/StronicowyParser|StronicowyParser
|Wikibooks:Moduły/StronicowyParser/Tom I|StronicowyParser - Tom I
|Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy|StronicowyParser - AnalizaSpisuRzeczy
|Wikibooks:Moduły/StronicowyParser/GłównaFunkcjaZbieraniaDanychStron|StronicowyParser - GłównaFunkcjaZbieraniaDanychStron
|Wikibooks:Moduły/StronicowyParser/Kategorie|StronicowyParser - Kategorie
|Wikibooks:Moduły/StronicowyParser/NumerLubNazwaArtykułówKsiążek|StronicowyParser - NumerLubNazwaArtykułówKsiążek
|Wikibooks:Moduły/StronicowyParser/NumerLubNazwaNagłówkówKsiążek|StronicowyParser - NumerLubNazwaNagłówkówKsiążek
|Wikibooks:Moduły/StronicowyParser/NumerObiektu|StronicowyParser - NumerObiektu
|Wikibooks:Moduły/StronicowyParser/NumeracjaObiektówStron|StronicowyParser - NumeracjaObiektówStron
|Wikibooks:Moduły/StronicowyParser/Potrzebne|StronicowyParser - Potrzebne
|Wikibooks:Moduły/StronicowyParser/Problemy|StronicowyParser - Problemy
|Wikibooks:Moduły/StronicowyParser/Rozdziały|StronicowyParser - Rozdziały
|Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom I|StronicowyParser - Rozdziały - Tom I
|Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom II|StronicowyParser - Rozdziały - Tom II
|Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom III|StronicowyParser - Rozdziały - Tom III
|Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom IV|StronicowyParser - Rozdziały - Tom IV
|Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom V|StronicowyParser - Rozdziały - Tom V
|Wikibooks:Moduły/StronicowyParser/SpisTreści|StronicowyParser - SpisTreści
|Wikibooks:Moduły/StronicowyParser/SpisTreści/Tom I|StronicowyParser - SpisTreści - Tom I
|Wikibooks:Moduły/StronicowyParser/SpisTreści/Tom II|StronicowyParser - SpisTreści - Tom II
|Wikibooks:Moduły/StronicowyParser/StronaSubst|StronicowyParser - StronaSubst
|Wikibooks:Moduły/StronicowyParser/Tekst|StronicowyParser - Tekst
|Wikibooks:Moduły/StronicowyParser/ZbieranieDanychStron|StronicowyParser - ZbieranieDanychStron
|Wikibooks:Moduły/StronicowyParser/SzablonyTekstu|StronicowyParser - SzablonyTekstu
|Wikibooks:Moduły/StronicowyParser/informacje|StronicowyParser - informacje
|Wikibooks:Moduły/StronicowyParser/obiekty|StronicowyParser - obiekty
|Wikibooks:Moduły/Szeregi|Moduł:Szeregi
|Wikibooks:Moduły/Skrót|Moduł:Skrót
|Wikibooks:Moduły/Strony|Moduł:Strony
|Wikibooks:Moduły/Sekcja referencyjna|Moduł:Sekcja referencyjna
|Wikibooks:Szablony/Ogólne|Szablony - Ogólne
|Wikibooks:Szablony/Informacje|Szablony - Informacje
|Wikibooks:Szablony/PrzypisStrona|PrzypisStrona
|Wikibooks:Szablony/Podręcznikowe|Szablony - Podręcznikowe
|Wikibooks:Szablony/Książkowe|Szablony - Książkowe
|Wikibooks:Szablony/Tekst|Szablony - Tekst
|Wikibooks:Szablony/Zawartość|Szablony - Zawartość
|Wikibooks:Szablony/Nagłówki|Szablony - Nagłówki
|Wikibooks:Szablony/Przekierowania|Szablony - Przekierowania
|Wikibooks:Szablony/Języki|Szablony - Języki
|Wikibooks:Szablony/Liczby|Szablony - Liczby
|Wikibooks:Szablony/Kategorie|Szablony - Kategorie
|Wikibooks:Szablony/Opisy|Szablony - Opisy
|Wikibooks:Szablony/Znaczniki|Szablony - Znaczniki
|Wikibooks:Szablony/Szablony opływania|Szablony opływania
|Wikibooks:Szablony/Stronicowe|Szablony - Stronicowe
|Wikibooks:Szablony/Kontenerowe|Szablony - Kontenerowe
|Wikibooks:Szablony/Elastyczne|Szablony - Elastyczne
|Wikibooks:Szablony/Infoboksy/Prolog|Szablony - Infoboksy - Prolog
|Wikibooks:Szablony/Infoboksy/Tom I|Szablony - Infoboksy - Tom I
|Wikibooks:Szablony/Infoboksy/Tom II|Szablony - Infoboksy - Tom II
|Wikibooks:Szablony/Infoboksy/Tom III|Szablony - Infoboksy - Tom III
|Wikibooks:Szablony/Infoboksy/Tom IV|Szablony - Infoboksy - Tom IV
|Wikibooks:Szablony/Infoboksy/Tom V|Szablony - Infoboksy - Tom V
|Wikibooks:Szablony/Infoboksy/Tom VI|Szablony - Infoboksy - Tom VI
|Wikibooks:Szablony/Infoboksy/Komponenty|Szablony - Infoboksy - Komponenty
|Wikibooks:Szablony/Infoboksy/Komponenty (organizmy żywe)|Infoboksy - Komponenty (organizmy żywe)
|Wikibooks:Szablony/Porządkowe|Szablony - Porządkowe
|Wikibooks:Szablony/Źródła artykułów|Szablony - Źródła artykułów
|Wikibooks:Szablony/Linki|Szablony - Linki
|Wikibooks:Szablony/Linki inteligentne|Szablony - Linki inteligentne
|Wikibooks:Szablony/Do usunięcia|Szablony - Do usunięcia
|Wikibooks:Szablony/Nawigacja|Szablony - Nawigacja
|Wikibooks:Szablony/Media|Szablony - Media
|Wikibooks:Szablony/Grafika|Szablony - Grafika
|Wikibooks:Szablony/Licencjonowanie|Szablony - Licencjonowanie
|Wikibooks:Szablony/Techniczne|Szablony - Techniczne
|Wikibooks:Szablony/Wikipedysta|Szablony - Wikipedysta
|Wikibooks:Szablony/Dyskusja Wikipedysty|Szablony - Dyskusja Wikipedysty
|Wikibooks:Szablony/MediaWiki|Szablony - MediaWiki
|Wikibooks:Szablony/Systemowe|Szablony - Systemowe
|Pomoc:Spis treści/Szablony/Tom I|Szablony - Tom I
|Pomoc:Spis treści/Szablony/Tom II|Szablony - Tom II
|Pomoc:Spis treści/Szablony/Tom III|Szablony - Tom III
|Pomoc:Spis treści/Szablony/Tom IV|Szablony - Tom IV
|Pomoc:Spis treści/Administracja|Administracja
|Wikibooks:Kwestie techniczne|Kwestie techniczne
|Wikibooks:Wikipedyści potrzebujący pomocy|Wikipedyści potrzebujący pomocy
|Wikibooks:Zgłoś błąd (ZB)|Zgłoś błąd (ZB)
|Wikibooks:Lista Naruszeń Praw Autorskich (NPA)|Lista Naruszeń Praw Autorskich (NPA)
|Wikibooks:Administratorzy|Administratorzy
|Wikibooks:Prośby do administratorów|Prośby do administratorów
|Wikibooks:Administratorzy interfejsu|Administratorzy interfejsu
|Wikibooks:Prośby do administratorów interfejsu|Prośby do administratorów interfejsu
|Wikibooks:Biurokraci|Biurokraci
|Wikibooks:Boty|Boty
|Wikibooks:Stewardzi|Stewardzi
|Wikibooks:Użytkownicy|Użytkownicy
|Wikibooks:Automatycznie zatwierdzeni użytkownicy|Automatycznie zatwierdzeni użytkownicy
|Wikibooks:Zatwierdzeni użytkownicy|Zatwierdzeni użytkownicy
|Wikibooks:Przyznawanie uprawnień|Przyznawanie uprawnień
|Wikibooks:Nazwa użytkownika|Nazwa użytkownika
|Wikibooks:Prośby o zmianę nazwy użytkownika|Prośby o zmianę nazwy użytkownika
|Wikibooks:Uprawnieni do logowania się z zablokowanych adresów IP|Uprawnieni do logowania się z zablokowanych adresów IP
|Wikibooks:GNU Free Documentation License|GNU Free Documentation License
}}</includeonly><noinclude>{{Dokumentacja|zawartość=Szablon manualny (ręczny), nie automatyczny, bo ustawiony za pomocą {{Parametr|automat manualny|tak}}, wskazujący poprzedni i następny artykuł pomocy oraz ich stronę główną, czyli spis po {{LinkPomoc2|Spis treści}}.}}{{Kategoria|Szablony nawigacyjne układu autonawigacji do autonawigacji podręczników}}</noinclude>
918c3uc0zzf5ybowr1jakxf75hby2fu
Konkurs Piosenki Eurowizji/Geografia konkursu: Dlaczego w Europie gra Australia, Izrael i Azerbejdżan
0
63547
551353
543265
2026-08-11T10:41:28Z
CommonsDelinker
1569
Removing [[:c:File:Stage_Opening_06-fill_size=1600x900.jpg|Stage_Opening_06-fill_size=1600x900.jpg]], it has been deleted from Commons by [[:c:User:Gbawden|Gbawden]] because: per [[:c:Commons:Deletion requests/File:Stage Opening 06-fill size=1600x900.jpg|
551353
wikitext
text/x-wiki
[[Plik:Wiener Stadthalle for Eurovision 2026 (night).jpg|mały]]
Konkurs Piosenki Eurowizji jest często postrzegany jako impreza wyłącznie europejska, jednak uczestniczyły w nim lub uczestniczą nadawcy z Australii, Izraela, Azerbejdżanu, Maroka czy Armenii. Zrozumienie tych przypadków wymaga odwołania się do kryteriów uczestnictwa, które opierają się nie na geografii politycznej, lecz na przynależności do określonych instytucji i stref nadawczych.
== Kryterium uczestnictwa: Europejska Strefa Nadawcza i EBU ==
Prawo do udziału w konkursie mają wyłącznie nadawcy posiadający status Członka Aktywnego Europejskiej Unii Nadawców (EBU). Kryterium uzyskania tego statusu nie jest przynależność geograficzna do Europy, lecz jeden z dwóch warunków:
Znajdowanie się w granicach Europejskiej Strefy Nadawczej – obszaru geograficznego zdefiniowanego przez Międzynarodowy Związek Telekomunikacyjny (ITU), który obejmuje nie tylko Europę, ale również część Azji Zachodniej oraz północną Afrykę.
Posiadanie statusu obserwatora lub uczestnika w Radzie Europy przez dane państwo.
Kraje takie jak Izrael, Azerbejdżan, Armenia, Gruzja czy Maroko spełniają pierwsze kryterium, ponieważ ich terytoria mieszczą się w granicach Europejskiej Strefy Nadawczej. Maroko uczestniczyło w konkursie jednorazowo w 1980 roku.
== Izrael i Azerbejdżan: specyfika uczestnictwa ==
Izrael jest uczestnikiem Eurowizji od 1973 roku. Izraelska publiczna stacja telewizyjna (obecnie Kan) jest Członkiem Aktywnym EBU ze względu na położenie kraju w granicach Europejskiej Strefy Nadawczej. Izrael trzykrotnie wygrał konkurs (1978, 1979, 1998), a w roku 1999 po raz pierwszy był gospodarzem Eurowizji.
Azerbejdżan przystąpił do konkursu w 2008 roku. Kraj ten leży na pograniczu Europy i Azji; jego zachodni region geograficznie mieści się w Europejskiej Strefie Nadawczej, co stanowiło podstawę dla Azerbaijani Public Television (ITV) do uzyskania członkostwa w EBU.
== Australia: wyjątek od reguły ==
Australia jest szczególnym przypadkiem, ponieważ nie spełnia ani geograficznego, ani instytucjonalnego kryterium podstawowego. Australijska publiczna stacja SBS nie jest Członkiem Aktywnym EBU, lecz jedynie Członkiem Stowarzyszonym, który zwykle nie ma prawa uczestnictwa w konkursie jako uczestnik. Zaproszenie Australii do rywalizacji od 2015 roku wynikało wyłącznie z decyzji EBU, podjętej z okazji 60. jubileuszu Eurowizji i związanej z faktem, że SBS transmituje konkurs dla australijskiej widowni od dziesięcioleci, budując tam dużą popularność wydarzenia. EBU przyznało Australii specjalny status uczestnika, odnawialny każdego roku, co oznacza, że kraj ten bierze udział w konkursie na podstawie indywidualnego zaproszenia, a nie stałego regulaminowego uprawnienia.
39cyq2swwvavbi938vd4j4eulfxn5oz
Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom I
4
63902
551199
2026-08-10T12:25:19Z
Persino
2851
Utworzono nową stronę „<noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.TekstWprowadzeniaTekstu}} == Funkcja liczy tekst pomiędzy dwoma rozdziami o danych identyfikatorach {{Code|id}} na podstawie podanego tekstu do rozważań, kt…”
551199
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.TekstWprowadzeniaTekstu}} ==
Funkcja liczy tekst pomiędzy dwoma rozdziami o danych identyfikatorach {{Code|id}} na podstawie podanego tekstu do rozważań, który może posiadać rozdziały z tymi unikalnymi wartościami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.TekstWprowadzeniaTekstu(tekst,id_rozdzialu1,id_rozdzialu2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do analizy, do uzyskania pomiędzy dwoma identyfikatorami tekstu,
* {{Code|id_rozdzialu1}} - ten rozdział pierwszy, za którym jest wyszukiwany tekst - domyślna wartość pusta, wtedy tekst jest wyszukiwany od poczatku, do pewnego identyfikatora,
* {{Code|id_rozdzialu2}} - ten rozdział drugi, przed którym jest wyszukiwany tekst - domyślna wartość pusta, wtedy tekst jest wyszukiwany do końca, od pewnego identyfikatora.
Przykład użycia:
<syntaxhighlight lang="lua">
local strona="Pomoc:Spis treści";
local title=mw.title.makeTitle('',strona);
local tekst=title:getContent();
local id_rozdzialu1="Pomoc Wikibooks";
local id_rozdzialu2="Wstęp";
local stronicowyparser_rozdzialu_modul=require("Module:StronicowyParser/Rozdziały");
tekst=stronicowyparser_rozdzialu_modul.TekstWprowadzeniaTekstu(tekst,id_rozdzialu1,id_rozdzialu2);
</syntaxhighlight>
Uzykane wyniki w tekście pomiędzy dwoma identyfikatorami:
<syntaxhighlight lang="lua">
local tekst="'''{{lr|Czym jest Wikibooks|Wikibooks}}''' jest zbiorem darmowych książek pisanych przez internautów. Poniższe strony pomocy zawierają porady i informacje o naszym projekcie. Projekt ten – będący siostrzanym projektem Wikipedii – powstał 10 lipca 2003 r. Polska wersja została uruchomiona '''24 stycznia 2004 roku''' i w tej chwili posiada już {{Forma wyrazu podręcznik po liczbie|'''{{LICZBAPODRĘCZNIKÓW}}'''}}, a w nich {{Forma wyrazu artykuł po liczbie|'''{{NUMBEROFARTICLES}}'''}}.";
</syntaxhighlight>
== {{Code|p.TekstPoNapisieWprowadzeniaTekstuStrony}} ==
Funkcja liczy tekst pomiędzy dwoma {{Code|id}} rozdziałami o danych identyfikatorach na podstawie wydobytego ze strony zawartości. Ten tekst jest uzyskany z funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.title.makeTitle|b=tak}}}}, na podstawie nazwy podanej jako pierwszy argument ramki tablicy transportu, funkcja też potrafić sprawdzić, czy uchwyt pliku jest prawidłowy lub czy plik istnieje, a także czy zawartość strony istnieje, bo np. chcelibyśmy policzyć zawartość strony w przestrzeni {{Np|Special|link=tak}} lub {{Np|Media|link=tak}}, wtedy wiadomo, że otrzymamy, że zawartość strony w tych przestrzeniach nazw nie istnieje, wyjątiem są inne istniejące strony, którego zawartość na pewno istnieje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.TekstPoNapisieWprowadzeniaTekstuStrony(frame)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|frame}} - tablica ramki funkcji rablicy transportu.
Parametry ramki funkcji tablicy transprotu dziecka rodzica:
* {{Code|1}} - nazwa strony do analizy (rozwijany funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|b=tak}}}}), którego chcemy sprawdzić zawartość strony, jeśli istnieje, pomiędzy dwoma {{Code|id}} rozdziałami - funkcja rozwija nazwę strony wwzględem funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|b=tak}}}},
* {{Code|2}} - ten rozdział pierwszy, za którym jest wyszukiwany tekst - domyślna wartość pusta, wtedy tekst jest wyszukiwany od poczatku, do pewnego identyfikatora,
* {{Code|3}} - ten rozdział drugi, przed którym jest wyszukiwany tekst - domyślna wartość pusta, wtedy tekst jest wyszukiwany do końca, od pewnego identyfikatora.
Funkcja ramki uruchamia: {{Code|{{sr|#p.TekstWprowadzeniaTekstu|b=tak}}}}, do wyszukiwania tekstu pomiędzy dwoma rozdziałami, jako typową funkcję biblioteczną.
Przykłady użycia w postaci ramki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}:
<syntaxhighlight lang="mediawiki">
{{#invoke:StronicowyParser/Rozdziały|TekstPoNapisieWprowadzeniaTekstuStrony|Pomoc:Spis treści|Pomoc Wikibooks|Wstęp}};
</syntaxhighlight>
Wyniki zwrócone przez ramkę uruchomioną, w rozdzicu, jako dziecko:
<syntaxhighlight lang="mediawiki">
'''{{lr|Czym jest Wikibooks|Wikibooks}}''' jest zbiorem darmowych książek pisanych przez internautów. Poniższe strony pomocy zawierają porady i informacje o naszym projekcie. Projekt ten – będący siostrzanym projektem Wikipedii – powstał 10 lipca 2003 r. Polska wersja została uruchomiona '''24 stycznia 2004 roku''' i w tej chwili posiada już {{Forma wyrazu podręcznik po liczbie|'''{{LICZBAPODRĘCZNIKÓW}}'''}}, a w nich {{Forma wyrazu artykuł po liczbie|'''{{NUMBEROFARTICLES}}'''}}.
</syntaxhighlight>
== {{Code|p.ZwracanieSekcjiNapisuWprowadzeniaTekstuStrony}} ==
Funkcja zwraca nagłówek (sekcję) rozwinięty o danym identyfikatorze na podstawie wydobytego ze strony zawartości. Ten tekst jest uzyskany z funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.title.makeTitle|b=tak}}}}, na podstawie nazwy podanej jako pierwszy argument ramki tablicy transportu, funkcja też potrafić sprawdzić, czy uchwyt pliku jest prawidłowy lub czy plik istnieje, a także czy zawartość strony istnieje, bo np. chcelibyśmy policzyć zawartość strony w przestrzeni {{Np|Special|link=tak}} lub {{Np|Media|link=tak}}, wtedy wiadomo, że otrzymamy, że zawartość strony w tych przestrzeniach nazw nie istnieje, wyjątiem są inne istniejące strony, którego zawartość na pewno istnieje.
Funkcja też uwzględnia, że dany rozdział w tekście może się powtarzać, i dlatego trzeba to robić za pomocą numerków przy {{Code|id}}, aby wyszukać ten ściśle określony .
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ZwracanieSekcjiNapisuWprowadzeniaTekstuStrony(frame)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|frame}} - tablica ramki tablicy transportu funkcji.
Parametry ramki funkcji tablicy transportu:
* {{Code|1}} - nazwa strony - funkcja rozwija nazwę strony,
* {{Code|2}} - identyfikator rozdzialu - domyślna wartość pusta.
Przykłady użycia:
<syntaxhighlight lang="lua">
{{#invoke:StronicowyParser/Rozdziały|ZwracanieSekcjiNapisuWprowadzeniaTekstuStrony|Wikibooks:Jak_przeglądać_Wikibooks|Opera}}
</syntaxhighlight>
Uzyskane wyniki w postaci nierozwiniętego wikikodu:
<syntaxhighlight lang="mediawiki">
<templatestyles src="Szablon:Link_wewnętrzny/styles.css"><span class="niew link">[[:w:Opera (program)|Opera]]</span>
</syntaxhighlight>
== {{Code|p.NumerSekcjiStrony}} ==
Funkcja liczy numer sekcji rozdziału, który posiada dany identyfikator na podstawie wydobytego ze strony zawartości. Ten tekst jest uzyskany z funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.title.makeTitle|b=tak}}}}, na podstawie nazwy podanej jako pierwszy argument ramki tablicy transportu, funkcja też potrafić sprawdzić, czy uchwyt pliku jest prawidłowy lub czy plik istnieje, a także czy zawartość strony istnieje, bo np. chcelibyśmy policzyć zawartość strony w przestrzeni {{Np|Special|link=tak}} lub {{Np|Media|link=tak}}, wtedy wiadomo, że otrzymamy, że zawartość strony w tych przestrzeniach nazw nie istnieje, wyjątiem są inne istniejące strony, którego zawartość na pewno istnieje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.NumerSekcjiStrony(frame)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|frame}} - tablica ramki funkcji rablicy transportu.
Parametry ramki funkcji tablicy transprotu dziecka rodzica:
* {{Code|1}} - nazwa strony do analizy (rozwijany funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|b=tak}}}}), którego chcemy sprawdzić zawartość strony, jeśli istnieje, pomiędzy dwoma id rozdziałami - funkcja rozwija nazwę strony wwzględem funkcji: frame:preprocess,
* {{Code|2}} - ten rozdział pierwszy, za którym jest wyszukiwany tekst - domyślna wartość pusta,
Przykład użycia w kodzie {{lpg|Lua}} w {{lpr|Lua|Scribunto}}:
<syntaxhighlight lang="lua">
{{#invoke:StronicowyParser/Rozdziały|NumerSekcjiStrony|Wikibooks:Jak_przeglądać_Wikibooks|Opera}}
</syntaxhighlight>
Otrzymane wyniki, to przedstawia numer sekcji podanego rozdziału jest: {{Code|9}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
2mzaf0o2ticpcxdemxanzalt5muwlrg
Wikibooks:Moduły/StronicowyParser/Rozdziały
4
63903
551201
2026-08-10T12:30:49Z
Persino
2851
Utworzono nową stronę „<noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == Wstęp == Poniższe funkcje służą do analizowania stron spisu treści, aby przygotować je do analizowania przez moduł: {{Code|{{ld2|StronicowyParser/SpisTreści}}}…”
551201
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== Wstęp ==
Poniższe funkcje służą do analizowania stron spisu treści, aby przygotować je do analizowania przez moduł: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
=== Rozdziały ===
* Dodatnie - dzielimy je na normalne i inne, a te na rozdziały centrowane znacznikowe i centrowane:
** normalne (równaniowe) - to są rozdziały napisane za pomocą znaku {{Code|{{=}}}}, które po prawej i lewej stronie znajduje się tych znaków minimalnie taka sama liczba, a pomiędzy nimi jest zwykły tekst, i nie tylko, są to rozdziały typu, np.: {{Code|<nowiki>== Tekst rozdziału ==</nowiki>}},
** Inne (nierównaniowe):
*** Rozdziały centrowane znacznikowe - są to rozdziały dodatnie napisane za pomocą znacznika: {{Tag|center}}, przykład: {{Tag|center|zawartość=Tekst rozdziału}},
*** Rozdziały centrowane szablonowe - są to rozdziały dodatnie napisane przy pomocy jednego szablonu z: {{s|Center}}, {{s|Centruj}} lub {{s|Ce}}, przykład: {{Code|{{s|Center|Tekst rozdziału}}}},
* Ujemne - to są listy w liniach zaczynających się od znaku: {{Code|<nowiki>[;%*:#]</nowiki>}}, nie mogą być to znaczniki list, za tymi znakami znajduje się zwykły tekst, i nie tylko, są to rozdziały typu: {{Code|<nowiki>:** Tekst rozdziału</nowiki>}},
* Zerowe - to są rozdziały nie będące ani dodatnie, czy ujemne, ale nie wszystkie takie są zerowe, to zależy od pewnych kryteriów ustalanych przez funkcję: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}, są to rozdziały typu: {{Code|Tekst rozdziału:}}.
=== Zmienne spotykane w opisywanych tutaj funkcjach ===
==== Zmienne bazy ====
W poniższych funkcjach często spotykamy parametry:
* {{Code|tekst}} {{Patrz|tekst}} (cały tekst), {{Code|linia}} {{Patrz|linia}} (linia w tekście) - tekst przeważnie zakodowany funkcją kodującą, mogący być modyfikowany przez inne funkcje,
* {{Code|szablon}} {{Patrz|szablon}} - zakodowany tekst szablonu, jak w: {{LinkPatrz|tekst}}, tym szablonem może być też nie tylko normalnie szablon, ale może być to jakikolwiek instrukcja warunkowa wikikodu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} - pełna nazwa strony szablonowe jakiegoś spisu podręcznika, potrzebna do analizy adresów: {{Code|./}} lub {{Code|../}}, do rozwijania ich adresów względnych do bezwzględnych. Jest liczona bez nazwy przestrzeni {{Np|Template|link=tak}}, w tej przestrzeni, a w innych z przestrzeniami, a w {{Np|(main)|link=tak}} z dwukropkiem na początku.
==== Zmienne szablonowe rozkładu ich na czynniki pierwsze ====
* {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} - tabela parametrów szablonu,
* {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} - nazwa szablonu,
* {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} - tabela jego modyfikatorów.
==== Baza danych wikikodu ====
Tutaj są opisywane funkcje i zmienne, które dotyczą kodowania baz danych wikikodu.
===== Zmienne bazy danych i do nich parametrów =====
* {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} - nazwa modułu (uchwyt) używana zamiast tabeli bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, jeżeli taki istnieje w bazie wewnętrznym funkcji: {{Code|{{m|Szablonowe}}}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} - tablica kodów bazy: {{Code|{{m|Szablonowe}}}}, generowaną przez funkcję: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z modułu: {{Code|{{ld2|Szablonowe/Potrzebne}}}}, i modyfikowane przez inne,
* {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} - tablica parametrów rozłożeń na mniejsze elementy różnych elementów bazy.
===== Inne elementy bazy =====
* {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} - tabela potrzebna do rozważań dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, mówiąca coś o przekierowaniach, aby nie liczyć pewnych parametrów od począdku.
==== Funkcje bazy danych i do nich parametrów ====
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{Patrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - funkcja, która usuwa elementy w tablicy: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{Patrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - fukcja, która usuwa elementy, i w ich powiązanych metablicach, w tablicy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
==== Inne funkcje ====
===== Funkcje bazy =====
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|IteratorSzablonowyZakodowanegoTekstu}} - służy on jako iterator po zakodowany elementach, w tym elementach szablonowych, ale też w tym warunkowych,
* {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}}{{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}} - funkcja służąca do kodowania i modyfikowania tekstu, zastępując w nim elementy ich kodami, tworząc tablicę kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, którego elementu można rozkładać i umieszczać w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{Patrz|NormaWzoruKodowaniaTekstu}} - sprawdzająca, czy w kodzie są kody (czy tekst jest zakodowany), tzn. czy są kody o jakikolwiek {{Code|obiekt}} {{LinkPatrz|obiekt}} (typ obiektu kodu) i {{Code|kod}} {{LinkPatrz|kod}} (o liczbie całkowitej dodatniej).
===== Inne =====
* {{Code|{{sr|p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}} - funkcja do analizowania linków zwykłych wewnętrznychi zewnętrznych oraz linków tzw. inteligentnych.
==== Elementy bazy ====
* {{Code|obiekt}} {{Patrz|obiekt}} - parametr, w postaci łańcucha znakowego typu elementu w kodzie,
* {{Code|kod}} {{Patrz|kod}} - numer tego elementu o danym typie {{LinkPatrz|obiekt}}. Te numery mogą mieć przerwy, możliwie zaczynające się od jedynki, ale nigdy od zera, dla kodów tego samego typu, bo za pomocą innych funkcji można skasować to z jedynką lub elementy powodujące przerwy, te operacje są według {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
==== Inne zmienne ====
* {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - te parametry przedstawiają: nazwę przestrzeni nazw strony, nazwę przestrzeni książki i nazwę ksiązki,
* {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} - nazwa artykułu spisu treści.
=== Przykładowy kod funkcji: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, do usuwania elementów tabeli parametrów ===
Funkcję: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, często ją się definiuje:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local tab_analiza=szablonowe_modul.LiczbyParametroweInformacjiBazyKodowaniaWikikodu();
local __FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE=function(szablon,obiekt,kod,poziom_iteracji)
local tab_obiekt=tab_analiza[obiekt];
if(not tab_obiekt)then return;end;
for _,wartosc in pairs(tab_obiekt)do
local element_wartosc=tablica_danych_parametrow_szablonu_strony[wartosc];
if(element_wartosc)then
element_wartosc[kod]=nil;
end;
end;
end;
</syntaxhighlight>
Ta funkcja usuwa elementy tablicy: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, które są reprezentowane przez element liczbowy {{Code|kod}} {{LinkPatrz|kod}}.
=== Przykładowy kod funkcji: {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, do usuwania elementów tabeli bazy ===
A funkcję: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, można zdefiniować, usuwając z tablicy wielowymiarowej jeden element reprezentowany przez dwie zmienne:
<syntaxhighlight lang="lua">
local __FUNKCJA_OPERACJE_USUWANIE_BAZOWE=function(szablon,obiekt,kod,poziom_iteracji)
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=nil;
end;
</syntaxhighlight>
Przy tej funkcji należy uważać, aby nie wywołać błędu języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jakby element {{Code|obiekt}} {{LinkPatrz|obiekt}} nie istniał w tabeli.
Ta funkcja usuwa elementy z tablicy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, które są reprezentowane przez zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
eh23j41ils4e56cz2qrjbco1yssxk3i
551207
551201
2026-08-10T13:02:54Z
Persino
2851
551207
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== Wstęp ==
Poniższe funkcje służą do analizowania stron spisu treści, aby przygotować je do analizowania przez moduł: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
=== Rozdziały ===
* Dodatnie - dzielimy je na normalne i inne, a te na rozdziały centrowane znacznikowe i centrowane:
** normalne (równaniowe) - to są rozdziały napisane za pomocą znaku {{Code|{{=}}}}, które po prawej i lewej stronie znajduje się tych znaków minimalnie taka sama liczba, a pomiędzy nimi jest zwykły tekst, i nie tylko, są to rozdziały typu, np.: {{Code|<nowiki>== Tekst rozdziału ==</nowiki>}},
** Inne (nierównaniowe):
*** Rozdziały centrowane znacznikowe - są to rozdziały dodatnie napisane za pomocą znacznika: {{Tag|center}}, przykład: {{Tag|center|zawartość=Tekst rozdziału}},
*** Rozdziały centrowane szablonowe - są to rozdziały dodatnie napisane przy pomocy jednego szablonu z: {{s|Center}}, {{s|Centruj}} lub {{s|Ce}}, przykład: {{Code|{{s|Center|Tekst rozdziału}}}},
* Ujemne - to są listy w liniach zaczynających się od znaku: {{Code|<nowiki>[;%*:#]</nowiki>}}, nie mogą być to znaczniki list, za tymi znakami znajduje się zwykły tekst, i nie tylko, są to rozdziały typu: {{Code|<nowiki>:** Tekst rozdziału</nowiki>}},
* Zerowe - to są rozdziały nie będące ani dodatnie, czy ujemne, ale nie wszystkie takie są zerowe, to zależy od pewnych kryteriów ustalanych przez funkcję: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}, są to rozdziały typu: {{Code|Tekst rozdziału:}}.
=== Zmienne spotykane w opisywanych tutaj funkcjach ===
==== Zmienne bazy ====
W poniższych funkcjach często spotykamy parametry:
* {{Code|tekst}} {{Patrz|tekst}} (cały tekst), {{Code|linia}} {{Patrz|linia}} (linia w tekście) - tekst przeważnie zakodowany funkcją kodującą, mogący być modyfikowany przez inne funkcje,
* {{Code|szablon}} {{Patrz|szablon}} - zakodowany tekst szablonu, jak w: {{LinkPatrz|tekst}}, tym szablonem może być też nie tylko normalnie szablon, ale może być to jakikolwiek instrukcja warunkowa wikikodu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} - pełna nazwa strony szablonowe jakiegoś spisu podręcznika, potrzebna do analizy adresów: {{Code|./}} lub {{Code|../}}, do rozwijania ich adresów względnych do bezwzględnych. Jest liczona bez nazwy przestrzeni {{Np|Template|link=tak}}, w tej przestrzeni, a w innych z przestrzeniami, a w {{Np|(main)|link=tak}} z dwukropkiem na początku.
==== Zmienne szablonowe rozkładu ich na czynniki pierwsze ====
* {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} - tabela parametrów szablonu,
* {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} - nazwa szablonu,
* {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} - tabela jego modyfikatorów.
==== Baza danych wikikodu ====
Tutaj są opisywane funkcje i zmienne, które dotyczą kodowania baz danych wikikodu.
===== Zmienne bazy danych i do nich parametrów =====
* {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} - nazwa modułu (uchwyt) używana zamiast tabeli bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, jeżeli taki istnieje w bazie wewnętrznym funkcji: {{Code|{{m|Szablonowe}}}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} - tablica kodów bazy: {{Code|{{m|Szablonowe}}}}, generowaną przez funkcję: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z modułu: {{Code|{{ld2|Szablonowe/Potrzebne}}}}, i modyfikowane przez inne,
* {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} - tablica parametrów rozłożeń na mniejsze elementy różnych elementów bazy.
===== Inne elementy bazy =====
* {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} - tabela potrzebna do rozważań dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, mówiąca coś o przekierowaniach, aby nie liczyć pewnych parametrów od począdku.
==== Funkcje bazy danych i do nich parametrów ====
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{Patrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - funkcja, która usuwa elementy w tablicy: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{Patrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - fukcja, która usuwa elementy, i w ich powiązanych metablicach, w tablicy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
==== Inne funkcje ====
===== Funkcje bazy =====
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|IteratorSzablonowyZakodowanegoTekstu}} - służy on jako iterator po zakodowany elementach, w tym elementach szablonowych, ale też w tym warunkowych,
* {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}}{{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}} - funkcja służąca do kodowania i modyfikowania tekstu, zastępując w nim elementy ich kodami, tworząc tablicę kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, którego elementu można rozkładać i umieszczać w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{Patrz|NormaWzoruKodowaniaTekstu}} - sprawdzająca, czy w kodzie są kody (czy tekst jest zakodowany), tzn. czy są kody o jakikolwiek {{Code|obiekt}} {{LinkPatrz|obiekt}} (typ obiektu kodu) i {{Code|kod}} {{LinkPatrz|kod}} (o liczbie całkowitej dodatniej).
===== Inne =====
* {{Code|{{sr|p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}} - funkcja do analizowania linków zwykłych wewnętrznychi zewnętrznych oraz linków tzw. inteligentnych.
==== Elementy bazy ====
* {{Code|obiekt}} {{Patrz|obiekt}} - parametr, w postaci łańcucha znakowego typu elementu w kodzie,
* {{Code|kod}} {{Patrz|kod}} - numer tego elementu o danym typie {{LinkPatrz|obiekt}}. Te numery mogą mieć przerwy, możliwie zaczynające się od jedynki, ale nigdy od zera, dla kodów tego samego typu, bo za pomocą innych funkcji można skasować to z jedynką lub elementy powodujące przerwy, te operacje są według {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
==== Inne zmienne ====
* {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - te parametry przedstawiają: nazwę przestrzeni nazw strony, nazwę przestrzeni książki i nazwę ksiązki,
* {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} - nazwa artykułu spisu treści.
=== Przykładowy kod funkcji: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, do usuwania elementów tabeli parametrów ===
Funkcję: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, często ją się definiuje:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local tab_analiza=szablonowe_modul.LiczbyParametroweInformacjiBazyKodowaniaWikikodu();
local __FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE=function(szablon,obiekt,kod,poziom_iteracji)
local tab_obiekt=tab_analiza[obiekt];
if(not tab_obiekt)then return;end;
for _,wartosc in pairs(tab_obiekt)do
local element_wartosc=tablica_danych_parametrow_szablonu_strony[wartosc];
if(element_wartosc)then
element_wartosc[kod]=nil;
end;
end;
end;
</syntaxhighlight>
Ta funkcja usuwa elementy tablicy: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, które są reprezentowane przez element liczbowy {{Code|kod}} {{LinkPatrz|kod}}.
=== Przykładowy kod funkcji: {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, do usuwania elementów tabeli bazy ===
A funkcję: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, można zdefiniować, usuwając z tablicy wielowymiarowej jeden element reprezentowany przez dwie zmienne:
<syntaxhighlight lang="lua">
local __FUNKCJA_OPERACJE_USUWANIE_BAZOWE=function(szablon,obiekt,kod,poziom_iteracji)
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=nil;
end;
</syntaxhighlight>
Przy tej funkcji należy uważać, aby nie wywołać błędu języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jakby element {{Code|obiekt}} {{LinkPatrz|obiekt}} nie istniał w tabeli.
Ta funkcja usuwa elementy z tablicy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, które są reprezentowane przez zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}.
== Spis treści ==
* {{lru|Moduły/StronicowyParser/Rozdziały/Tom I}}
* {{lru|Moduły/StronicowyParser/Rozdziały/Tom II}}
* {{lru|Moduły/StronicowyParser/Rozdziały/Tom III}}
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
sn0dustx5hxwfsp0d9r0c9qnzbs6mro
551228
551207
2026-08-10T13:55:57Z
Persino
2851
551228
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== Wstęp ==
Poniższe funkcje służą do analizowania stron spisu treści, aby przygotować je do analizowania przez moduł: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
=== Rozdziały ===
* Dodatnie - dzielimy je na normalne i inne, a te na rozdziały centrowane znacznikowe i centrowane:
** normalne (równaniowe) - to są rozdziały napisane za pomocą znaku {{Code|{{=}}}}, które po prawej i lewej stronie znajduje się tych znaków minimalnie taka sama liczba, a pomiędzy nimi jest zwykły tekst, i nie tylko, są to rozdziały typu, np.: {{Code|<nowiki>== Tekst rozdziału ==</nowiki>}},
** Inne (nierównaniowe):
*** Rozdziały centrowane znacznikowe - są to rozdziały dodatnie napisane za pomocą znacznika: {{Tag|center}}, przykład: {{Tag|center|zawartość=Tekst rozdziału}},
*** Rozdziały centrowane szablonowe - są to rozdziały dodatnie napisane przy pomocy jednego szablonu z: {{s|Center}}, {{s|Centruj}} lub {{s|Ce}}, przykład: {{Code|{{s|Center|Tekst rozdziału}}}},
* Ujemne - to są listy w liniach zaczynających się od znaku: {{Code|<nowiki>[;%*:#]</nowiki>}}, nie mogą być to znaczniki list, za tymi znakami znajduje się zwykły tekst, i nie tylko, są to rozdziały typu: {{Code|<nowiki>:** Tekst rozdziału</nowiki>}},
* Zerowe - to są rozdziały nie będące ani dodatnie, czy ujemne, ale nie wszystkie takie są zerowe, to zależy od pewnych kryteriów ustalanych przez funkcję: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}, są to rozdziały typu: {{Code|Tekst rozdziału:}}.
=== Zmienne spotykane w opisywanych tutaj funkcjach ===
==== Zmienne bazy ====
W poniższych funkcjach często spotykamy parametry:
* {{Code|tekst}} {{Patrz|tekst}} (cały tekst), {{Code|linia}} {{Patrz|linia}} (linia w tekście) - tekst przeważnie zakodowany funkcją kodującą, mogący być modyfikowany przez inne funkcje,
* {{Code|szablon}} {{Patrz|szablon}} - zakodowany tekst szablonu, jak w: {{LinkPatrz|tekst}}, tym szablonem może być też nie tylko normalnie szablon, ale może być to jakikolwiek instrukcja warunkowa wikikodu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} - pełna nazwa strony szablonowe jakiegoś spisu podręcznika, potrzebna do analizy adresów: {{Code|./}} lub {{Code|../}}, do rozwijania ich adresów względnych do bezwzględnych. Jest liczona bez nazwy przestrzeni {{Np|Template|link=tak}}, w tej przestrzeni, a w innych z przestrzeniami, a w {{Np|(main)|link=tak}} z dwukropkiem na początku.
==== Zmienne szablonowe rozkładu ich na czynniki pierwsze ====
* {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} - tabela parametrów szablonu,
* {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} - nazwa szablonu,
* {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} - tabela jego modyfikatorów.
==== Baza danych wikikodu ====
Tutaj są opisywane funkcje i zmienne, które dotyczą kodowania baz danych wikikodu.
===== Zmienne bazy danych i do nich parametrów =====
* {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} - nazwa modułu (uchwyt) używana zamiast tabeli bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, jeżeli taki istnieje w bazie wewnętrznym funkcji: {{Code|{{m|Szablonowe}}}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} - tablica kodów bazy: {{Code|{{m|Szablonowe}}}}, generowaną przez funkcję: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z modułu: {{Code|{{ld2|Szablonowe/Potrzebne}}}}, i modyfikowane przez inne,
* {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} - tablica parametrów rozłożeń na mniejsze elementy różnych elementów bazy.
===== Inne elementy bazy =====
* {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} - tabela potrzebna do rozważań dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, mówiąca coś o przekierowaniach, aby nie liczyć pewnych parametrów od począdku.
==== Funkcje bazy danych i do nich parametrów ====
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{Patrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - funkcja, która usuwa elementy w tablicy: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{Patrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - fukcja, która usuwa elementy, i w ich powiązanych metablicach, w tablicy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
==== Inne funkcje ====
===== Funkcje bazy =====
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|IteratorSzablonowyZakodowanegoTekstu}} - służy on jako iterator po zakodowany elementach, w tym elementach szablonowych, ale też w tym warunkowych,
* {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}}{{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}} - funkcja służąca do kodowania i modyfikowania tekstu, zastępując w nim elementy ich kodami, tworząc tablicę kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, którego elementu można rozkładać i umieszczać w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{Patrz|NormaWzoruKodowaniaTekstu}} - sprawdzająca, czy w kodzie są kody (czy tekst jest zakodowany), tzn. czy są kody o jakikolwiek {{Code|obiekt}} {{LinkPatrz|obiekt}} (typ obiektu kodu) i {{Code|kod}} {{LinkPatrz|kod}} (o liczbie całkowitej dodatniej).
===== Inne =====
* {{Code|{{sr|p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}} - funkcja do analizowania linków zwykłych wewnętrznychi zewnętrznych oraz linków tzw. inteligentnych.
==== Elementy bazy ====
* {{Code|obiekt}} {{Patrz|obiekt}} - parametr, w postaci łańcucha znakowego typu elementu w kodzie,
* {{Code|kod}} {{Patrz|kod}} - numer tego elementu o danym typie {{LinkPatrz|obiekt}}. Te numery mogą mieć przerwy, możliwie zaczynające się od jedynki, ale nigdy od zera, dla kodów tego samego typu, bo za pomocą innych funkcji można skasować to z jedynką lub elementy powodujące przerwy, te operacje są według {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
==== Inne zmienne ====
* {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - te parametry przedstawiają: nazwę przestrzeni nazw strony, nazwę przestrzeni książki i nazwę ksiązki,
* {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} - nazwa artykułu spisu treści.
=== Przykładowy kod funkcji: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, do usuwania elementów tabeli parametrów ===
Funkcję: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}}, często ją się definiuje:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local tab_analiza=szablonowe_modul.LiczbyParametroweInformacjiBazyKodowaniaWikikodu();
local __FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE=function(szablon,obiekt,kod,poziom_iteracji)
local tab_obiekt=tab_analiza[obiekt];
if(not tab_obiekt)then return;end;
for _,wartosc in pairs(tab_obiekt)do
local element_wartosc=tablica_danych_parametrow_szablonu_strony[wartosc];
if(element_wartosc)then
element_wartosc[kod]=nil;
end;
end;
end;
</syntaxhighlight>
Ta funkcja usuwa elementy tablicy: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, które są reprezentowane przez element liczbowy {{Code|kod}} {{LinkPatrz|kod}}.
=== Przykładowy kod funkcji: {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, do usuwania elementów tabeli bazy ===
A funkcję: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, można zdefiniować, usuwając z tablicy wielowymiarowej jeden element reprezentowany przez dwie zmienne:
<syntaxhighlight lang="lua">
local __FUNKCJA_OPERACJE_USUWANIE_BAZOWE=function(szablon,obiekt,kod,poziom_iteracji)
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=nil;
end;
</syntaxhighlight>
Przy tej funkcji należy uważać, aby nie wywołać błędu języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jakby element {{Code|obiekt}} {{LinkPatrz|obiekt}} nie istniał w tabeli.
Ta funkcja usuwa elementy z tablicy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, które są reprezentowane przez zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}.
== Spis treści ==
* {{lru|Moduły/StronicowyParser/Rozdziały/Tom I}}
* {{lru|Moduły/StronicowyParser/Rozdziały/Tom II}}
* {{lru|Moduły/StronicowyParser/Rozdziały/Tom III}}
* {{lru|Moduły/StronicowyParser/Rozdziały/Tom IV}}
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
me4gd9u53su6v9lcvjvrvbgq9p498ay
Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom II
4
63904
551204
2026-08-10T12:57:12Z
Persino
2851
Utworzono nową stronę „<noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.NapisWprowadzeniaTekstu}} == Funkcja tworzy nagłówek rozdziału. Dla poziomu większego niż zero, ale mniejszego niż sieden zwraca nagłówek, np.: {{Code|…”
551204
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.NapisWprowadzeniaTekstu}} ==
Funkcja tworzy nagłówek rozdziału. Dla poziomu większego niż zero, ale mniejszego niż sieden zwraca nagłówek, np.: {{Code|{{=}}{{=}} Nagłówek tekstu {{=}}{{=}}}}, a dla większego niż sześć kreuje je jako, np.: {{Code|<nowiki><h6 class=\"mw-hnumber mw-hnumber-7">Nagłówek tekstu</h6></nowiki>}}. Gdy {{Code|0 < poziom <{{=}} 6}} tworzony jest taki nagłówek, że z lewej i prawej strony jest tyle minimalnie równa się, ile wskazuje poziom. A dla większego niż sześć tworzony jest nagłówek za pomocą znacznika {{Code|<nowiki><h6></nowiki>}} z klasą ogólną {{Code|mw-hnumber}} plus {{Code|mw-hnumber-<poziom>}}, gdzie {{Code|<poziom>}}, to numer danego poziomu. A więc funkcja pozwala tworzyć nagłówki o dowolnym poziomie większym niż zero, o ile {{lpg|Lua}} w {{lpr|Lua|Scribunto}} na to pozwoli, ze strony swoich ograniczeń.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.NapisWprowadzeniaTekstu(rozdzial,poziom)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|rozdzial}} - tekst wnętrza rozdziału,
* {{Code|poziom}} - numer całkowity dodatni poziomu.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local rozdzial="Tekst rozdziału";
local napis_rozdzialu1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,4);
local napis_rozdzialu2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,8);
</syntaxhighlight>
Wyniki użycia w zmiennych:
<syntaxhighlight lang="lua">
local napis_rozdzialu1="\n====Tekst rozdziału====\n";
local napis_rozdzialu2="\n<h6 class=\"mw-hnumber mw-hnumber-8\">Tekst rozdziału</h6>\n";
</syntaxhighlight>
== {{Code|p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego}} ==
Funkcja sprawdzająca, czy we podanym rozdziale, dodatnim lub ujemnym, o pewnym formacie, który musi istnieć, jako format szablonu {{s|HNumer}}, czy istnieje w nim element (obiekt), w postaci zakodowanej, o kodzie: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, który nie zawiera w sobie żadnej nowej linii, a jak nie zawiera, to czy ten element jest bezpośrednio elementem rozdziału napisanego wewnątrz tego szablonu.
Defnicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(tekst,zawartosc,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst zawartości pierwszego parametru wspomnianego szablonu,
* {{Code|zawartość}} {{Patrz|zawartosc}} - zawartość elementu kodu,
* {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} - jaki to jest obiekt, np. {{Code|ZNACZNIK}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod danego obiektu.
Funkcja wykorzystuje do swojego liczenia instrukcję: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{LinkPatrz|NormaWzoruKodowaniaTekstu|StronicowyParser/Rozdziały}}, aby policzyć kod pewnego elementu mając zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, aby wykorzystać ta metodę.
Przykłady użycia, używając omawianego szablonu:
<syntaxhighlight lang="mediawiki">
{{HNumer|1= === Oto jest tekst <span class="plainlinks">Zawartość znacznika</span> ===}}
{{HNumer|1= * Oto jest tekst <span class="plainlinks">Zawartość znacznika</span>}}
</syntaxhighlight>
Zmienną {{Code|tekst}} w nich kolejno, które należy zakodować odpowiednio właściwą funkcją, aby otrzymać odpowiednio ich wersje zakodowane, tej zmiennej, aby móc operować tą funkcją, w przeciwnym wypadku tej funkcji nie ma sensu używać, bo otrzymamy nieprzewidywalne skutki:
<syntaxhighlight lang="lua">
local tekst="=== Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span> ===";
local tekst="* Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span>";
</syntaxhighlight>
A {{Code|zawartosc}} kolejno, która mieści się w wersji zakodowanej zmiennej {{Code|tekst}} (tutaj mamy wersje jego niezakodowaną):
<syntaxhighlight lang="lua">
local zawartosc="Zawartość znacznika";
local zawartosc="Zawartość znacznika";
</syntaxhighlight>
W obu przykładach szablon zwraca wartość: {{Code|true}} (bo w tej ostatniej zmiennej nie ma nowej linii), pod warunkiem, że znacznik: {{Code|<nowiki><span class="plainlinks">Zawartość znacznika</span></nowiki>}}, jest zakodowany w zmiennej {{Code|tekst}}, i jest częścią zmiennej tej wersji, co jest uwidocznione kodem, według dwóch kolejnych sprawdzeń wykluczających się:
<syntaxhighlight lang="lua">
if(mw.ustring.match(tekst,"\n=+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*=+[^%S\n]*\n"))then return true;end;
if(mw.ustring.match(tekst,"\n[:#%*;]+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*\n"))then return true;end;
</syntaxhighlight>
Widzimy, że ten znacznik musi leżeć bezpośrednio w zakodowanym tekście (to musi być zakodowane, bo w przeciwnym wypadku nie ma o czym mówić).
== {{Code|p.NapisWprowadzeniaTekstuHNumer}} ==
Generuje napis wprowadzenia tekstu według szablonu {{s|HNumer}}, w którym parametrach szablonów jest równaniowy nagłówek. Szablon dla {{Code|0 < poziom <{{=}} 6}} poziomów, np.: {{Code|{{=}}{{=}} Nagłówek Tekstu {{=}}{{=}}}}, podaje poziom napisu wprowadzenia tekstu przy pomocy funkcji: {{Code|{{sr|#p.PodajNapisPoziomuWprowadzeniaTekstu}}}}, i go zamienia na znaczniki od: {{Code|<nowiki><h1></nowiki>}} do {{Code|<nowiki><h6></nowiki>}}, a dla {{Code|poziom > 6}}, tworzy inny nagłówek, dla {{Code|<nowiki>======== Nagłówek tekstu ========</nowiki>}}, tworzy: {{Code|<nowiki><h6 class="mw-hnumber mw-hnumber-8">Nagłówek tekstu</h6></nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.NapisWprowadzeniaTekstuHNumer(parametr)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|parametr}} - napisz wprowadzenia tekstu dodatni, czyli napisany za pomocą znaku {{Code|{{=}}}}, rozdziały napisane za pomocą list, tzn. napisane tak by zaczynały się od: {{Code|<nowiki>#*:;</nowiki>}}, odpadają, inne listy znacznikowe też.
Przykłady użycia reprezentujące dwa rozłączne formy przedstawiające nagłówki, napisane tym samym sposobem:
<syntaxhighlight lang="mediawiki">
{{HNumer|1= === Nagłówek tekstu ===}}
{{HNumer|1= ======= Nagłówek tekstu =======}}
</syntaxhighlight>
Wtedy wywołania funkcyjne, a w nich parametr {{Code|parametr}} można zdefiniować dwóch w zmiennych, one są przetwarzane na odpowiednie nagłówki, ten parametr może być zakodowany, ale nie musi tak być, tak otrzymany nagłówek, równie dobrze możemy zakodować, a otrzymany tekst, aby przygotować do dalszej analizy przez inne funkcje, czy metody:
<syntaxhighlight lang="lua">
---- Nagłówki typowo dodatnie
local tekst1="=== Nagłówek tekstu ===";
local tekst2="======= Nagłówek tekstu =======";
---- Wywołania tworzące nagłówki
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local naglowek1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst1);
local naglowek2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst2);
</syntaxhighlight>
Funkcja zamienia to kolejno je na standardowe nagłówki {{Strong|HTML}}, które reprezentują nagłówko o dowolnym poziomie, tutaj dla: {{Code|poziom > 6}}, też można tak zrobić poprzez osobne dwie klasy, tzn. klasę ogólną: {{Code|mw-hnumber}}, i szczególną: {{Code|mw-hnumber-<liczba>}}:
<syntaxhighlight lang="lua">
local naglowek1="<h3>Nagłówek tekstu</h3>";
local naglowek2="<h6 class=\"mw-hnumber mw-hnumber-8\">Nagłówek tekstu</h6>";
</syntaxhighlight>
== {{Code|p.PodajNapisPoziomuWprowadzeniaTekstu}} ==
Szablon na podstawie dowolnego nagłówka dodatniego równaniowego, tzn. o poziomie o dobrowolnej liczbie, tzn. jego poziom może być: {{Code|poziom > {{=}} 1}}, a nie {{Code|1 <{{=}} poziom <{{=}} 6 }}, równa się, czyli np.: {{Code|<nowiki>====== Tekst nagłówka ======</nowiki>}}, takie poziomy są jedynie interpretowalne przez {{Strong|MediaWiki}}, a ta funkcja również uwzględnia poziomy: {{Code|poziom > 6}}, czyli o liczbie {{Code|{{=}}}} z prawej i lewej strony nagłówka o większej liczbie niż sześć. Metoda podaje jego zawartość (nagłówek jest trimowany funkcją: {{Code|mw.text.trim}}) i poziom, jako dwa kolejne parametry zwracane, tzn. {{Code|naglowek, poziom}}, przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.PodajNapisPoziomuWprowadzeniaTekstu(linia)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - parametr przedstawiający linię rozważanego tekstu, ona może być zakodowana,
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="====== Tekst nagłówka ======";
local naglowek,poziom=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Wynikiem działania tego przykładu:
<syntaxhighlight lang="lua">
local naglowek="Tekst nagłówka";
local poziom=6;
</syntaxhighlight>
Zawartością zmiennej wchodzącej do naszej funkcji musi być sciśle od poczatku do końca nagłówek o wspomnianym formacie.
== {{Code|p.PodajTekstHNumerNapisuWprowadzeniaTekstu}} ==
Szablon podaje zawartość nagłówka rozdziału od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, i jego poziom, czyli liczba stojąca przy {{Code|h}}, tzn, jak mamy {{Code|<nowiki><h5></nowiki>}}, to tą liczbą jest {{Code|5}}. W innych przypadkach szablon zwraca zamiast liczby wartość {{Code|nil}}, np. gdy tag znacznika końcący nagłówek nie zgadza się z tym rozpoczynającym, lub gdy liczba przy {{Code|h}} jest większa niż {{Code|6}}, czyli: {{Code|<nowiki><h7></nowiki>}}, albo gdy np. mamy: {{Code|<nowiki><h67></nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.PodajTekstHNumerNapisuWprowadzeniaTekstu(linia)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - linia rozważanego tekstu, w tekście musi mieścić się ten znacznik, choćby jeden, on nie musi się rozpoczynać na samym początku, a kończyć się na samym końcu, wnętrze jego najlepiej by było zakodowane, najlepiej, by był w nim to znacznik tylko jeden w samej linii zawarty bezpośrednio tam, aby on cały był jednocześnie tą linią.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="<h5 class=\"plainlinks\">Tekst nagłówka</h5>";
local zawartosc,poziom=stronicowyparser_rozdzialy_modul.PodajTekstHNumerNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local zawartosc="Tekst nagłówka";
local poziom=5;
</syntaxhighlight>
== {{Code|p.CzyJestNapisWprowadzeniaTekstu}} ==
Funkcja podaje, czy w podanym tekście, jest jakikolwiek nagłówek dodatni, tzn. czy napisany za pomocą {{Code|{{=}}}}, tzn. np. {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, w zakodowanym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestNapisWprowadzeniaTekstu(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w którym zawarty jest jakikolwiek nagłówek, ono musi być zakodowane.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst\n== Tekst nagłówka == \n Oto jest dalszy tekst\n";
local napis_pierwszy_w_tekscie=stronicowyparser_rozdzialy_modul.CzyJestNapisWprowadzeniaTekstu(tekst);
</syntaxhighlight>
W powyższym tekście funkcja zwraca wartość równą pierwszemu wyszukiwanemu nagłówkowi, czyli:
<syntaxhighlight lang="lua">
local napis_pierwszy_w_tekscie="== Tekst nagłówka == ";
</syntaxhighlight>
Na podstawie tego wiadomo, że jakikolwiek taki nagłówek w tekście istnieje, gdyby nie było go tam wcale, to funkcja zwracałaby wartość: {{Code|nil}}.
== {{Code|p.CzyJestListaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy w tekście występuje nagłówek ujemny, czyli napis wprowadzenia tekstu, w postaci listy zaczynającej się od nowej linii: {{Code|<nowiki>[;%*:#]</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w który ma znajdować napis wprowadzenia tekstu w postaci listy.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local zawartosc="Oto jest tekst\n:* Tekst nagłóka ujemnego\n";
local lista=stronicowyparser_rozdzialy_modul.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc);
</syntaxhighlight>
Funkcja zwraca wartość niepustą łańcuchową powiadamiającą, że taka lista istnieje, czyli w tym przypadku: {{Code|<nowiki>\n:*</nowiki>}}.
== {{Code|p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu}} ==
Funkcja sprawdzająca, czy w tekście jest jakolwiek nagłówek podany w postaci równaniowej lub nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}.
Definicja skrótowa funkcji
<syntaxhighlight lang="lua">
function p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wiersz}} - czy w tekście jest wiersz z takim opisywanym nagłókiem.
Funkcja używa do sprawdzenia: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} (czy to jest rozdział dodatni) i {{Code|{{sr|#p.PodajTekstHNumerNapisuWprowadzeniaTekstu|b=tak}}}} (czy ujemny).
Przykłady funkcji:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst1="====== Tekst nagłówka ======";
local tekst2="<h5 class=\"plainlinks\">Tekst nagłówka</h5>";
local czy_jest_naglowek1,jaki_naglowek1=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst1);
local czy_jest_naglowek2,jaki_naglowek2=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst2);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local czy_jest_naglowek1,jaki_naglowek1=true,true;
local czy_jest_naglowek2,jaki_naglowek2=true,false;
</syntaxhighlight>
== {{Code|p.WierszHNumer}} ==
Funkcja w nagłówkach od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, usuwa w nich nowe linie, zamieniając je po kolei na spację, i dodaje z lewej (przed znacznikiem) i prawej (po) strony tego nagłówka znak nowej linii: {{Code|\n}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.WierszHNumer(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - parametr z tymi nagłówkami.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst<h2>Tekst nagłówka\nDalej Tekst nagłówka</h2> Tekst rozdziału\nDalszy tekst rozdziału <h3>Tekst nagłówka\nDalszy nagłówek</h3>";
local wynik=stronicowyparser_rozdzialy_modul.WierszHNumer(tekst);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local wynik="Oto jest tekst\n<h2>Tekst nagłówka Dalej Tekst nagłówka</h2>\n Tekst rozdziału\nDalszy tekst rozdziału \n<h3>Tekst nagłówka Dalszy nagłówek</h3>\n";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
q9gw8fcwlfulkf951kpwba11ppbmzsv
551208
551204
2026-08-10T13:09:56Z
Persino
2851
551208
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.NapisWprowadzeniaTekstu}} ==
Funkcja tworzy nagłówek rozdziału. Dla poziomu większego niż zero, ale mniejszego niż sieden zwraca nagłówek, np.: {{Code|{{=}}{{=}} Nagłówek tekstu {{=}}{{=}}}}, a dla większego niż sześć kreuje je jako, np.: {{Code|<nowiki><h6 class=\"mw-hnumber mw-hnumber-7">Nagłówek tekstu</h6></nowiki>}}. Gdy {{Code|0 < poziom <{{=}} 6}} tworzony jest taki nagłówek, że z lewej i prawej strony jest tyle minimalnie równa się, ile wskazuje poziom. A dla większego niż sześć tworzony jest nagłówek za pomocą znacznika {{Code|<nowiki><h6></nowiki>}} z klasą ogólną {{Code|mw-hnumber}} plus {{Code|mw-hnumber-<poziom>}}, gdzie {{Code|<poziom>}}, to numer danego poziomu. A więc funkcja pozwala tworzyć nagłówki o dowolnym poziomie większym niż zero, o ile {{lpg|Lua}} w {{lpr|Lua|Scribunto}} na to pozwoli, ze strony swoich ograniczeń.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.NapisWprowadzeniaTekstu(rozdzial,poziom)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|rozdzial}} - tekst wnętrza rozdziału,
* {{Code|poziom}} - numer całkowity dodatni poziomu.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local rozdzial="Tekst rozdziału";
local napis_rozdzialu1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,4);
local napis_rozdzialu2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,8);
</syntaxhighlight>
Wyniki użycia w zmiennych:
<syntaxhighlight lang="lua">
local napis_rozdzialu1="\n====Tekst rozdziału====\n";
local napis_rozdzialu2="\n<h6 class=\"mw-hnumber mw-hnumber-8\">Tekst rozdziału</h6>\n";
</syntaxhighlight>
== {{Code|p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego}} ==
Funkcja sprawdzająca, czy we podanym rozdziale, dodatnim lub ujemnym, o pewnym formacie, który musi istnieć, jako format szablonu {{s|HNumer}}, czy istnieje w nim element (obiekt), w postaci zakodowanej, o kodzie: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, który nie zawiera w sobie żadnej nowej linii, a jak nie zawiera, to czy ten element jest bezpośrednio elementem rozdziału napisanego wewnątrz tego szablonu.
Defnicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(tekst,zawartosc,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst zawartości pierwszego parametru wspomnianego szablonu,
* {{Code|zawartość}} {{Patrz|zawartosc}} - zawartość elementu kodu,
* {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} - jaki to jest obiekt, np. {{Code|ZNACZNIK}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod danego obiektu.
Funkcja wykorzystuje do swojego liczenia instrukcję: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{LinkPatrz|NormaWzoruKodowaniaTekstu|StronicowyParser/Rozdziały}}, aby policzyć kod pewnego elementu mając zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, aby wykorzystać ta metodę.
Przykłady użycia, używając omawianego szablonu:
<syntaxhighlight lang="mediawiki">
{{HNumer|1= === Oto jest tekst <span class="plainlinks">Zawartość znacznika</span> ===}}
{{HNumer|1= * Oto jest tekst <span class="plainlinks">Zawartość znacznika</span>}}
</syntaxhighlight>
Zmienną {{Code|tekst}} w nich kolejno, które należy zakodować odpowiednio właściwą funkcją, aby otrzymać odpowiednio ich wersje zakodowane, tej zmiennej, aby móc operować tą funkcją, w przeciwnym wypadku tej funkcji nie ma sensu używać, bo otrzymamy nieprzewidywalne skutki:
<syntaxhighlight lang="lua">
local tekst="=== Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span> ===";
local tekst="* Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span>";
</syntaxhighlight>
A {{Code|zawartosc}} kolejno, która mieści się w wersji zakodowanej zmiennej {{Code|tekst}} (tutaj mamy wersje jego niezakodowaną):
<syntaxhighlight lang="lua">
local zawartosc="Zawartość znacznika";
local zawartosc="Zawartość znacznika";
</syntaxhighlight>
W obu przykładach szablon zwraca wartość: {{Code|true}} (bo w tej ostatniej zmiennej nie ma nowej linii), pod warunkiem, że znacznik: {{Code|<nowiki><span class="plainlinks">Zawartość znacznika</span></nowiki>}}, jest zakodowany w zmiennej {{Code|tekst}}, i jest częścią zmiennej tej wersji, co jest uwidocznione kodem, według dwóch kolejnych sprawdzeń wykluczających się:
<syntaxhighlight lang="lua">
if(mw.ustring.match(tekst,"\n=+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*=+[^%S\n]*\n"))then return true;end;
if(mw.ustring.match(tekst,"\n[:#%*;]+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*\n"))then return true;end;
</syntaxhighlight>
Widzimy, że ten znacznik musi leżeć bezpośrednio w zakodowanym tekście (to musi być zakodowane, bo w przeciwnym wypadku nie ma o czym mówić).
== {{Code|p.NapisWprowadzeniaTekstuHNumer}} ==
Generuje napis wprowadzenia tekstu według szablonu {{s|HNumer}}, w którym parametrach szablonów jest równaniowy nagłówek. Szablon dla {{Code|0 < poziom <{{=}} 6}} poziomów, np.: {{Code|{{=}}{{=}} Nagłówek Tekstu {{=}}{{=}}}}, podaje poziom napisu wprowadzenia tekstu przy pomocy funkcji: {{Code|{{sr|#p.PodajNapisPoziomuWprowadzeniaTekstu}}}}, i go zamienia na znaczniki od: {{Code|<nowiki><h1></nowiki>}} do {{Code|<nowiki><h6></nowiki>}}, a dla {{Code|poziom > 6}}, tworzy inny nagłówek, dla {{Code|<nowiki>======== Nagłówek tekstu ========</nowiki>}}, tworzy: {{Code|<nowiki><h6 class="mw-hnumber mw-hnumber-8">Nagłówek tekstu</h6></nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.NapisWprowadzeniaTekstuHNumer(parametr)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|parametr}} - napisz wprowadzenia tekstu dodatni, czyli napisany za pomocą znaku {{Code|{{=}}}}, rozdziały napisane za pomocą list, tzn. napisane tak by zaczynały się od: {{Code|<nowiki>#*:;</nowiki>}}, odpadają, inne listy znacznikowe też.
Przykłady użycia reprezentujące dwa rozłączne formy przedstawiające nagłówki, napisane tym samym sposobem:
<syntaxhighlight lang="mediawiki">
{{HNumer|1= === Nagłówek tekstu ===}}
{{HNumer|1= ======= Nagłówek tekstu =======}}
</syntaxhighlight>
Wtedy wywołania funkcyjne, a w nich parametr {{Code|parametr}} można zdefiniować dwóch w zmiennych, one są przetwarzane na odpowiednie nagłówki, ten parametr może być zakodowany, ale nie musi tak być, tak otrzymany nagłówek, równie dobrze możemy zakodować, a otrzymany tekst, aby przygotować do dalszej analizy przez inne funkcje, czy metody:
<syntaxhighlight lang="lua">
---- Nagłówki typowo dodatnie
local tekst1="=== Nagłówek tekstu ===";
local tekst2="======= Nagłówek tekstu =======";
---- Wywołania tworzące nagłówki
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local naglowek1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst1);
local naglowek2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst2);
</syntaxhighlight>
Funkcja zamienia to kolejno je na standardowe nagłówki {{Strong|HTML}}, które reprezentują nagłówko o dowolnym poziomie, tutaj dla: {{Code|poziom > 6}}, też można tak zrobić poprzez osobne dwie klasy, tzn. klasę ogólną: {{Code|mw-hnumber}}, i szczególną: {{Code|mw-hnumber-<liczba>}}:
<syntaxhighlight lang="lua">
local naglowek1="<h3>Nagłówek tekstu</h3>";
local naglowek2="<h6 class=\"mw-hnumber mw-hnumber-8\">Nagłówek tekstu</h6>";
</syntaxhighlight>
== {{Code|p.PodajNapisPoziomuWprowadzeniaTekstu}} ==
Szablon na podstawie dowolnego nagłówka dodatniego równaniowego, tzn. o poziomie o dobrowolnej liczbie, tzn. jego poziom może być: {{Code|poziom > {{=}} 1}}, a nie {{Code|1 <{{=}} poziom <{{=}} 6 }}, równa się, czyli np.: {{Code|<nowiki>====== Tekst nagłówka ======</nowiki>}}, takie poziomy są jedynie interpretowalne przez {{Strong|MediaWiki}}, a ta funkcja również uwzględnia poziomy: {{Code|poziom > 6}}, czyli o liczbie {{Code|{{=}}}} z prawej i lewej strony nagłówka o większej liczbie niż sześć. Metoda podaje jego zawartość (nagłówek jest trimowany funkcją: {{Code|mw.text.trim}}) i poziom, jako dwa kolejne parametry zwracane, tzn. {{Code|naglowek, poziom}}, przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.PodajNapisPoziomuWprowadzeniaTekstu(linia)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - parametr przedstawiający linię rozważanego tekstu, ona może być zakodowana,
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="====== Tekst nagłówka ======";
local naglowek,poziom=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Wynikiem działania tego przykładu:
<syntaxhighlight lang="lua">
local naglowek="Tekst nagłówka";
local poziom=6;
</syntaxhighlight>
Zawartością zmiennej wchodzącej do naszej funkcji musi być sciśle od poczatku do końca nagłówek o wspomnianym formacie.
== {{Code|p.PodajTekstHNumerNapisuWprowadzeniaTekstu}} ==
Szablon podaje zawartość nagłówka rozdziału od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, i jego poziom, czyli liczba stojąca przy {{Code|h}}, tzn, jak mamy {{Code|<nowiki><h5></nowiki>}}, to tą liczbą jest {{Code|5}}. W innych przypadkach szablon zwraca zamiast liczby wartość {{Code|nil}}, np. gdy tag znacznika końcący nagłówek nie zgadza się z tym rozpoczynającym, lub gdy liczba przy {{Code|h}} jest większa niż {{Code|6}}, czyli: {{Code|<nowiki><h7></nowiki>}}, albo gdy np. mamy: {{Code|<nowiki><h67></nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.PodajTekstHNumerNapisuWprowadzeniaTekstu(linia)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - linia rozważanego tekstu, w tekście musi mieścić się ten znacznik, choćby jeden, on nie musi się rozpoczynać na samym początku, a kończyć się na samym końcu, wnętrze jego najlepiej by było zakodowane, najlepiej, by był w nim to znacznik tylko jeden w samej linii zawarty bezpośrednio tam, aby on cały był jednocześnie tą linią.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="<h5 class=\"plainlinks\">Tekst nagłówka</h5>";
local zawartosc,poziom=stronicowyparser_rozdzialy_modul.PodajTekstHNumerNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local zawartosc="Tekst nagłówka";
local poziom=5;
</syntaxhighlight>
== {{Code|p.CzyJestNapisWprowadzeniaTekstu}} ==
Funkcja podaje, czy w podanym tekście, jest jakikolwiek nagłówek dodatni, tzn. czy napisany za pomocą {{Code|{{=}}}}, tzn. np. {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, w zakodowanym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestNapisWprowadzeniaTekstu(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w którym zawarty jest jakikolwiek nagłówek, ono musi być zakodowane.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst\n== Tekst nagłówka == \n Oto jest dalszy tekst\n";
local napis_pierwszy_w_tekscie=stronicowyparser_rozdzialy_modul.CzyJestNapisWprowadzeniaTekstu(tekst);
</syntaxhighlight>
W powyższym tekście funkcja zwraca wartość równą pierwszemu wyszukiwanemu nagłówkowi, czyli:
<syntaxhighlight lang="lua">
local napis_pierwszy_w_tekscie="== Tekst nagłówka == ";
</syntaxhighlight>
Na podstawie tego wiadomo, że jakikolwiek taki nagłówek w tekście istnieje, gdyby nie było go tam wcale, to funkcja zwracałaby wartość: {{Code|nil}}.
== {{Code|p.CzyJestListaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy w tekście występuje nagłówek ujemny, czyli napis wprowadzenia tekstu, w postaci listy zaczynającej się od nowej linii: {{Code|<nowiki>[;%*:#]</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w który ma znajdować napis wprowadzenia tekstu w postaci listy.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local zawartosc="Oto jest tekst\n:* Tekst nagłóka ujemnego\n";
local lista=stronicowyparser_rozdzialy_modul.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc);
</syntaxhighlight>
Funkcja zwraca wartość niepustą łańcuchową powiadamiającą, że taka lista istnieje, czyli w tym przypadku: {{Code|<nowiki>\n:*</nowiki>}}.
== {{Code|p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu}} ==
Funkcja sprawdzająca, czy w tekście jest jakolwiek nagłówek podany w postaci równaniowej lub nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}.
Definicja skrótowa funkcji
<syntaxhighlight lang="lua">
function p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wiersz}} - czy w tekście jest wiersz z takim opisywanym nagłókiem.
Funkcja używa do sprawdzenia: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} (czy to jest rozdział dodatni) i {{Code|{{sr|#p.PodajTekstHNumerNapisuWprowadzeniaTekstu|b=tak}}}} (czy ujemny).
Przykłady funkcji:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst1="====== Tekst nagłówka ======";
local tekst2="<h5 class=\"plainlinks\">Tekst nagłówka</h5>";
local czy_jest_naglowek1,jaki_naglowek1=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst1);
local czy_jest_naglowek2,jaki_naglowek2=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst2);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local czy_jest_naglowek1,jaki_naglowek1=true,true;
local czy_jest_naglowek2,jaki_naglowek2=true,false;
</syntaxhighlight>
== {{Code|p.WierszHNumer}} ==
Funkcja w nagłówkach od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, usuwa w nich nowe linie, zamieniając je po kolei na spację, i dodaje z lewej (przed znacznikiem) i prawej (po) strony tego nagłówka znak nowej linii: {{Code|\n}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.WierszHNumer(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - parametr z tymi nagłówkami.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst<h2>Tekst nagłówka\nDalej Tekst nagłówka</h2> Tekst rozdziału\nDalszy tekst rozdziału <h3>Tekst nagłówka\nDalszy nagłówek</h3>";
local wynik=stronicowyparser_rozdzialy_modul.WierszHNumer(tekst);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local wynik="Oto jest tekst\n<h2>Tekst nagłówka Dalej Tekst nagłówka</h2>\n Tekst rozdziału\nDalszy tekst rozdziału \n<h3>Tekst nagłówka Dalszy nagłówek</h3>\n";
</syntaxhighlight>
== {{Code|p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu}} ==
Mając napis rozdziału wraz z numeracją, fukcja liczy właściwy napis i numerację w osobnych po kolei parametrach. Jest to funkcja skomplikowana analizująca, czy numeracja jest poprawna, czy nie, jeśli numeracja jest poprawna, to ona zwraca rozdział bez numeracji i samą numerację, a jeśli nie, to cały rozdział i numerację, będącą ciągiem pustym.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|rozdzial_z_numeracja}} - rozdzial z numeracją lub bez.
Zwracane wartości:
* {{Code|rozdzial}} - rozdzial bez numeracji,
* {{Code|numetracja}} - numeracja.
Przykłady użycia:
; Pierwszy{{Dk}} {{Code|z numeracją}}{{Dk}}
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local rozdzial_z_numeracja="5.1.2.3. Napis Rozdziału";
local rozdzial,numeracja=stronicowyparser_rozdzialy_modul.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local rozdzial="Napis Rozdziału";
local numeracja="5.1.2.3.";
</syntaxhighlight>
; Drugi{{Dk}} {{Code|bez numeracji}}{{Dk}}
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local rozdzial_z_numeracja="Napis Rozdziału";
local rozdzial,numeracja=stronicowyparser_rozdzialy_modul.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local rozdzial="Napis Rozdziału";
local numeracja="";
</syntaxhighlight>
== {{Code|p.CzyZerowyNapisWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy napis wprowadzenia tekstu, który nie jest dodatni, tzn. np.: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}} (czyli określony wzorem: {{Code|<nowiki>=+[^\n]*[^=]+[^\n]*=+[^%S\n]*</nowiki>}}), ani np.: linia opisywana formułą: {{Code|<nowiki>\n[:#%*;]+[^\n]*</nowiki>}}, zatem to jest przepis na definicję na tą funkcję, ale nie do końca, bo w tej funkcji pierwszy parametr nie może opisywać tego, ani tego. Funkcja zwraca dwa parametry, tzn. otrzymany rozdział i wartość: {{Code|true/false}}. Wartość {{Code|true}} mówi o rozdziale zerowym, a przeciwna wartość, że taki on nie jest. Także funkcja może zwracać wartość {{Code|nil}}, to determiniuje, że to nie jest rozdział wcale zerowy, czyli rozdział świadczący, że to jest zerowy, nie musi być wcale zerowy.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametr funkcji:
* {{Code|linia}} {{LinkPatrz|linia}} - rozważana zakodowana linia, która może być rozdziałem zerowym, ale ona nie może być dodatnia, ani ujemna,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}.
Do liczenia rozdziału spisu treści (rzeczy) funkcja wykorzystuje z modułu {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}} - funkcja sprawdzająca {{Code|true/nil}}, czy w tekście znajduje się rozdział, który jest o nazwie typu: {{Code|Spis treści}} ({{Code|Spis rzeczy}}) - niezależnie jakimi literami napisany, ile tam jest odstępów, a do kompletowania (rozwijania) rozdziałów, służy do tego z {{Code|{{ld2|StronicowyParser/SpisTreści}}}}: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}.
Przykłady użycia (w przykładach przyjeliśmy najprostrzy wygląd tych rozdziałów, tzn. ich nie trzeba rozwijać i kompletować dalej, czyli wtedy ta funkcja jest ona w tym jedynie przypadku tożsamościowa):
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local linia="Spis treści";
local tablica_analizy_obiektow_strony_dany_modul={};
---- Ta część kodu w tym przypadku jest opcjonalna, ze względu na niekodowalną zmienną: linia;
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
---- Koniec tej części kodu;
local tablica_danych_parametrow_szablonu_strony={};
local rozdzial,czy_tak=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Funckja w tym wypadku zwraca wynik:
<syntaxhighlight lang="lua">
local rozdzial,czy_tak="Spis treści",true;
</syntaxhighlight>
Weźmy inny przykład:
<syntaxhighlight lang="lua">
---- Przykład pierwszy;
local linia="'''Nagłówek'''";
local rozdzial,czy_tak="'''Nagłówek'''",true;
---- Przykład drugi;
local linia="'''Nagłówek'''.";
local rozdzial,czy_tak="'''Nagłówek'''.",false;
</syntaxhighlight>
== {{Code|p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu}} ==
Funkcja sprawdza, czy strona jest z przedrostkiem listy: {{Code|:}}, a dla tego, czy linia jest w cudzysłowach pojedyńczych podwójnych, a jeżeli to nie jest prawda, to funkcja zwraca wynik {{Code|false}}, normalnie przy braku parametru linkowego: {{LinkPatrz|z_parametrami_linkowymi}}, lub przy jej wartości fałszywej, funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku on rewiduje, czy w lini są artykuły aktualnej ksiązki, wtedy ona zwraca wynik {{Code|false}}, a jeżeli nie, to zwracany w przeciwnym wypadku jest wynik {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLinikamiNieWoluminu(przedrotek_listy,linia,z_parametrami_linkowymi,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|przedrotek_listy}} {{Patrz|przedrotek_listy}} - przedrostek listy z linią {{Code|linia}},
* {{Code|linia}} {{LinkPatrz|linia}} - linia bez przedrostka,
* {{Code|z_parametrami_linkowymi}} {{Patrz|z_parametrami_linkowymi}} - wartość {{Code|false}}, aby nie sprawdzał właśności artykularnych artykułów na linku, wtedy funkcja na samym końcu przy sprawdzedniu tego parametru,a jeżeli ta wartość, to wtedy otrzymany wynik z funkcji to {{Code|true}}, przeciwnym funkcja idzie dalej,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, i {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}} - parametry nazw książki,
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}}.
Funckja wykorzustuje: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|NormaWzoruKodowaniaTekstu}}, {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu}}, i {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} - jak w: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local linia="''[[Książka/Artykuł|Artykuł]]''";
local tablica_analizy_obiektow_strony_dany_modul={};
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local przedrotek_listy=":";
local tablica_danych_parametrow_szablonu_strony={};
local tab_nazwa_spisow_przekierowaniowych={};
---- Tutaj funkcja zwróci wartość: true;
local czy_tak=stronicowyparser_rozdzialy_modul.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,false,"","","Książka","","",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
---- Tutaj funkcja zwróci wartość: false;
local czy_tak=stronicowyparser_rozdzialy_modul.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,true,"","","Książka","","",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
</syntaxhighlight>
== {{Code|p.HnNumerWprowadzeniaTekstu}} ==
Funkcja zwraca numer poziomu nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}. Jeśli poziom jest mniejszy niż 6, wtedy wynik zwracany tej funkcji jest liczbą stojącą przy {{Code|h}}. A gdy mamy {{Code|<nowiki><h6></nowiki>}}, jeżeli ten znacznik nie ma klasy ('''class''') atrybutu: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, to zwracane jest: 6, w przeciwnym wypadku daje to wynik, którym jest: {{Code|<liczba>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.HnNumerWprowadzeniaTekstu(nazwa,atrybuty)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa}} - nazwa tagu,
* {{Code|atrybuty}} - tabela atrybutów, których z jedną z elementów może być opcja: '''class'''.
Funkcja wykorzystuje podtablicę: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.znaczniki_wprowadzenia_tekstu}}, tablicy transportu, którego link ma referencje do jej opisu, zdefiniowany w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, definicja jej jest w:
<syntaxhighlight lang="lua">
p.znaczniki_wprowadzenia_tekstu={
["h1"]=1,
["h2"]=2,
["h3"]=3,
["h4"]=4,
["h5"]=5,
["h6"]=6,
};
</syntaxhighlight>
Funkcja posługuje się jedynie na tych typach znaczników, a nie innych.
Przykłady użycia:
; Pierwszy{{Dk}} {{Code|poziom<6}}{{Dk}}
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa="h5";
local atrybuty={};
local poziom=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty);
</syntaxhighlight>
Funkcja zwróci wynik: {{Code|5}}.
; Poziom{{Dk}} {{Code|poziom>{{=}}6}}{{Dk}}
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa="h6";
local atrybuty={};atrybuty["class"]="mw-hnumber-9";
local poziom=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty);
</syntaxhighlight>
Funkcja daje wynik: {{Code|9}}.
== {{Code|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ==
Funkcja zwraca numerację i rozdział całego rozdziału. Jest to funkcja bardzo prosta ponieważ nie analizuje numeracji, czy jest poprawnie podana, czy nie. Zawartość rozdziału musi się składać z numeracji, składający się z numerków oddzielonych kropkami - tutaj też mogą być dwie kropki koło siebie, albo numeracja może składać się z samych kropek, chociaż to jest niepoprawne, ale tak może być, na końcu numeracji może być też krokpa, po nm znajduje się właściwy rozdział zawartości tej wielkiej zawartości (rozdziału). A gdy numeracja nie istnieje, to zamiast niego zwracaną wartością jest wartość pusta.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} - zawartość rozdziału, jak w: {{LinkPatrz|zawartosc}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local zawartosc="5.1.6. Rozdział";
local numeracja,rozdzial=stronicowyparser_rozdzialy_modul.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local numeracja,rozdzial="5.1.6.","Rozdział";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
rgbzqmh9otuqq0lc2bbz76axqzrcgbi
551209
551208
2026-08-10T13:13:20Z
Persino
2851
/* {{Code|p.CzyZerowyNapisWprowadzeniaTekstu}} */
551209
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.NapisWprowadzeniaTekstu}} ==
Funkcja tworzy nagłówek rozdziału. Dla poziomu większego niż zero, ale mniejszego niż sieden zwraca nagłówek, np.: {{Code|{{=}}{{=}} Nagłówek tekstu {{=}}{{=}}}}, a dla większego niż sześć kreuje je jako, np.: {{Code|<nowiki><h6 class=\"mw-hnumber mw-hnumber-7">Nagłówek tekstu</h6></nowiki>}}. Gdy {{Code|0 < poziom <{{=}} 6}} tworzony jest taki nagłówek, że z lewej i prawej strony jest tyle minimalnie równa się, ile wskazuje poziom. A dla większego niż sześć tworzony jest nagłówek za pomocą znacznika {{Code|<nowiki><h6></nowiki>}} z klasą ogólną {{Code|mw-hnumber}} plus {{Code|mw-hnumber-<poziom>}}, gdzie {{Code|<poziom>}}, to numer danego poziomu. A więc funkcja pozwala tworzyć nagłówki o dowolnym poziomie większym niż zero, o ile {{lpg|Lua}} w {{lpr|Lua|Scribunto}} na to pozwoli, ze strony swoich ograniczeń.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.NapisWprowadzeniaTekstu(rozdzial,poziom)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|rozdzial}} - tekst wnętrza rozdziału,
* {{Code|poziom}} - numer całkowity dodatni poziomu.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local rozdzial="Tekst rozdziału";
local napis_rozdzialu1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,4);
local napis_rozdzialu2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,8);
</syntaxhighlight>
Wyniki użycia w zmiennych:
<syntaxhighlight lang="lua">
local napis_rozdzialu1="\n====Tekst rozdziału====\n";
local napis_rozdzialu2="\n<h6 class=\"mw-hnumber mw-hnumber-8\">Tekst rozdziału</h6>\n";
</syntaxhighlight>
== {{Code|p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego}} ==
Funkcja sprawdzająca, czy we podanym rozdziale, dodatnim lub ujemnym, o pewnym formacie, który musi istnieć, jako format szablonu {{s|HNumer}}, czy istnieje w nim element (obiekt), w postaci zakodowanej, o kodzie: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, który nie zawiera w sobie żadnej nowej linii, a jak nie zawiera, to czy ten element jest bezpośrednio elementem rozdziału napisanego wewnątrz tego szablonu.
Defnicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(tekst,zawartosc,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst zawartości pierwszego parametru wspomnianego szablonu,
* {{Code|zawartość}} {{Patrz|zawartosc}} - zawartość elementu kodu,
* {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} - jaki to jest obiekt, np. {{Code|ZNACZNIK}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod danego obiektu.
Funkcja wykorzystuje do swojego liczenia instrukcję: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{LinkPatrz|NormaWzoruKodowaniaTekstu|StronicowyParser/Rozdziały}}, aby policzyć kod pewnego elementu mając zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, aby wykorzystać ta metodę.
Przykłady użycia, używając omawianego szablonu:
<syntaxhighlight lang="mediawiki">
{{HNumer|1= === Oto jest tekst <span class="plainlinks">Zawartość znacznika</span> ===}}
{{HNumer|1= * Oto jest tekst <span class="plainlinks">Zawartość znacznika</span>}}
</syntaxhighlight>
Zmienną {{Code|tekst}} w nich kolejno, które należy zakodować odpowiednio właściwą funkcją, aby otrzymać odpowiednio ich wersje zakodowane, tej zmiennej, aby móc operować tą funkcją, w przeciwnym wypadku tej funkcji nie ma sensu używać, bo otrzymamy nieprzewidywalne skutki:
<syntaxhighlight lang="lua">
local tekst="=== Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span> ===";
local tekst="* Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span>";
</syntaxhighlight>
A {{Code|zawartosc}} kolejno, która mieści się w wersji zakodowanej zmiennej {{Code|tekst}} (tutaj mamy wersje jego niezakodowaną):
<syntaxhighlight lang="lua">
local zawartosc="Zawartość znacznika";
local zawartosc="Zawartość znacznika";
</syntaxhighlight>
W obu przykładach szablon zwraca wartość: {{Code|true}} (bo w tej ostatniej zmiennej nie ma nowej linii), pod warunkiem, że znacznik: {{Code|<nowiki><span class="plainlinks">Zawartość znacznika</span></nowiki>}}, jest zakodowany w zmiennej {{Code|tekst}}, i jest częścią zmiennej tej wersji, co jest uwidocznione kodem, według dwóch kolejnych sprawdzeń wykluczających się:
<syntaxhighlight lang="lua">
if(mw.ustring.match(tekst,"\n=+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*=+[^%S\n]*\n"))then return true;end;
if(mw.ustring.match(tekst,"\n[:#%*;]+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*\n"))then return true;end;
</syntaxhighlight>
Widzimy, że ten znacznik musi leżeć bezpośrednio w zakodowanym tekście (to musi być zakodowane, bo w przeciwnym wypadku nie ma o czym mówić).
== {{Code|p.NapisWprowadzeniaTekstuHNumer}} ==
Generuje napis wprowadzenia tekstu według szablonu {{s|HNumer}}, w którym parametrach szablonów jest równaniowy nagłówek. Szablon dla {{Code|0 < poziom <{{=}} 6}} poziomów, np.: {{Code|{{=}}{{=}} Nagłówek Tekstu {{=}}{{=}}}}, podaje poziom napisu wprowadzenia tekstu przy pomocy funkcji: {{Code|{{sr|#p.PodajNapisPoziomuWprowadzeniaTekstu}}}}, i go zamienia na znaczniki od: {{Code|<nowiki><h1></nowiki>}} do {{Code|<nowiki><h6></nowiki>}}, a dla {{Code|poziom > 6}}, tworzy inny nagłówek, dla {{Code|<nowiki>======== Nagłówek tekstu ========</nowiki>}}, tworzy: {{Code|<nowiki><h6 class="mw-hnumber mw-hnumber-8">Nagłówek tekstu</h6></nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.NapisWprowadzeniaTekstuHNumer(parametr)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|parametr}} - napisz wprowadzenia tekstu dodatni, czyli napisany za pomocą znaku {{Code|{{=}}}}, rozdziały napisane za pomocą list, tzn. napisane tak by zaczynały się od: {{Code|<nowiki>#*:;</nowiki>}}, odpadają, inne listy znacznikowe też.
Przykłady użycia reprezentujące dwa rozłączne formy przedstawiające nagłówki, napisane tym samym sposobem:
<syntaxhighlight lang="mediawiki">
{{HNumer|1= === Nagłówek tekstu ===}}
{{HNumer|1= ======= Nagłówek tekstu =======}}
</syntaxhighlight>
Wtedy wywołania funkcyjne, a w nich parametr {{Code|parametr}} można zdefiniować dwóch w zmiennych, one są przetwarzane na odpowiednie nagłówki, ten parametr może być zakodowany, ale nie musi tak być, tak otrzymany nagłówek, równie dobrze możemy zakodować, a otrzymany tekst, aby przygotować do dalszej analizy przez inne funkcje, czy metody:
<syntaxhighlight lang="lua">
---- Nagłówki typowo dodatnie
local tekst1="=== Nagłówek tekstu ===";
local tekst2="======= Nagłówek tekstu =======";
---- Wywołania tworzące nagłówki
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local naglowek1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst1);
local naglowek2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst2);
</syntaxhighlight>
Funkcja zamienia to kolejno je na standardowe nagłówki {{Strong|HTML}}, które reprezentują nagłówko o dowolnym poziomie, tutaj dla: {{Code|poziom > 6}}, też można tak zrobić poprzez osobne dwie klasy, tzn. klasę ogólną: {{Code|mw-hnumber}}, i szczególną: {{Code|mw-hnumber-<liczba>}}:
<syntaxhighlight lang="lua">
local naglowek1="<h3>Nagłówek tekstu</h3>";
local naglowek2="<h6 class=\"mw-hnumber mw-hnumber-8\">Nagłówek tekstu</h6>";
</syntaxhighlight>
== {{Code|p.PodajNapisPoziomuWprowadzeniaTekstu}} ==
Szablon na podstawie dowolnego nagłówka dodatniego równaniowego, tzn. o poziomie o dobrowolnej liczbie, tzn. jego poziom może być: {{Code|poziom > {{=}} 1}}, a nie {{Code|1 <{{=}} poziom <{{=}} 6 }}, równa się, czyli np.: {{Code|<nowiki>====== Tekst nagłówka ======</nowiki>}}, takie poziomy są jedynie interpretowalne przez {{Strong|MediaWiki}}, a ta funkcja również uwzględnia poziomy: {{Code|poziom > 6}}, czyli o liczbie {{Code|{{=}}}} z prawej i lewej strony nagłówka o większej liczbie niż sześć. Metoda podaje jego zawartość (nagłówek jest trimowany funkcją: {{Code|mw.text.trim}}) i poziom, jako dwa kolejne parametry zwracane, tzn. {{Code|naglowek, poziom}}, przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.PodajNapisPoziomuWprowadzeniaTekstu(linia)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - parametr przedstawiający linię rozważanego tekstu, ona może być zakodowana,
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="====== Tekst nagłówka ======";
local naglowek,poziom=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Wynikiem działania tego przykładu:
<syntaxhighlight lang="lua">
local naglowek="Tekst nagłówka";
local poziom=6;
</syntaxhighlight>
Zawartością zmiennej wchodzącej do naszej funkcji musi być sciśle od poczatku do końca nagłówek o wspomnianym formacie.
== {{Code|p.PodajTekstHNumerNapisuWprowadzeniaTekstu}} ==
Szablon podaje zawartość nagłówka rozdziału od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, i jego poziom, czyli liczba stojąca przy {{Code|h}}, tzn, jak mamy {{Code|<nowiki><h5></nowiki>}}, to tą liczbą jest {{Code|5}}. W innych przypadkach szablon zwraca zamiast liczby wartość {{Code|nil}}, np. gdy tag znacznika końcący nagłówek nie zgadza się z tym rozpoczynającym, lub gdy liczba przy {{Code|h}} jest większa niż {{Code|6}}, czyli: {{Code|<nowiki><h7></nowiki>}}, albo gdy np. mamy: {{Code|<nowiki><h67></nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.PodajTekstHNumerNapisuWprowadzeniaTekstu(linia)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - linia rozważanego tekstu, w tekście musi mieścić się ten znacznik, choćby jeden, on nie musi się rozpoczynać na samym początku, a kończyć się na samym końcu, wnętrze jego najlepiej by było zakodowane, najlepiej, by był w nim to znacznik tylko jeden w samej linii zawarty bezpośrednio tam, aby on cały był jednocześnie tą linią.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="<h5 class=\"plainlinks\">Tekst nagłówka</h5>";
local zawartosc,poziom=stronicowyparser_rozdzialy_modul.PodajTekstHNumerNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local zawartosc="Tekst nagłówka";
local poziom=5;
</syntaxhighlight>
== {{Code|p.CzyJestNapisWprowadzeniaTekstu}} ==
Funkcja podaje, czy w podanym tekście, jest jakikolwiek nagłówek dodatni, tzn. czy napisany za pomocą {{Code|{{=}}}}, tzn. np. {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, w zakodowanym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestNapisWprowadzeniaTekstu(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w którym zawarty jest jakikolwiek nagłówek, ono musi być zakodowane.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst\n== Tekst nagłówka == \n Oto jest dalszy tekst\n";
local napis_pierwszy_w_tekscie=stronicowyparser_rozdzialy_modul.CzyJestNapisWprowadzeniaTekstu(tekst);
</syntaxhighlight>
W powyższym tekście funkcja zwraca wartość równą pierwszemu wyszukiwanemu nagłówkowi, czyli:
<syntaxhighlight lang="lua">
local napis_pierwszy_w_tekscie="== Tekst nagłówka == ";
</syntaxhighlight>
Na podstawie tego wiadomo, że jakikolwiek taki nagłówek w tekście istnieje, gdyby nie było go tam wcale, to funkcja zwracałaby wartość: {{Code|nil}}.
== {{Code|p.CzyJestListaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy w tekście występuje nagłówek ujemny, czyli napis wprowadzenia tekstu, w postaci listy zaczynającej się od nowej linii: {{Code|<nowiki>[;%*:#]</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w który ma znajdować napis wprowadzenia tekstu w postaci listy.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local zawartosc="Oto jest tekst\n:* Tekst nagłóka ujemnego\n";
local lista=stronicowyparser_rozdzialy_modul.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc);
</syntaxhighlight>
Funkcja zwraca wartość niepustą łańcuchową powiadamiającą, że taka lista istnieje, czyli w tym przypadku: {{Code|<nowiki>\n:*</nowiki>}}.
== {{Code|p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu}} ==
Funkcja sprawdzająca, czy w tekście jest jakolwiek nagłówek podany w postaci równaniowej lub nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}.
Definicja skrótowa funkcji
<syntaxhighlight lang="lua">
function p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wiersz}} - czy w tekście jest wiersz z takim opisywanym nagłókiem.
Funkcja używa do sprawdzenia: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} (czy to jest rozdział dodatni) i {{Code|{{sr|#p.PodajTekstHNumerNapisuWprowadzeniaTekstu|b=tak}}}} (czy ujemny).
Przykłady funkcji:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst1="====== Tekst nagłówka ======";
local tekst2="<h5 class=\"plainlinks\">Tekst nagłówka</h5>";
local czy_jest_naglowek1,jaki_naglowek1=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst1);
local czy_jest_naglowek2,jaki_naglowek2=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst2);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local czy_jest_naglowek1,jaki_naglowek1=true,true;
local czy_jest_naglowek2,jaki_naglowek2=true,false;
</syntaxhighlight>
== {{Code|p.WierszHNumer}} ==
Funkcja w nagłówkach od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, usuwa w nich nowe linie, zamieniając je po kolei na spację, i dodaje z lewej (przed znacznikiem) i prawej (po) strony tego nagłówka znak nowej linii: {{Code|\n}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.WierszHNumer(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - parametr z tymi nagłówkami.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst<h2>Tekst nagłówka\nDalej Tekst nagłówka</h2> Tekst rozdziału\nDalszy tekst rozdziału <h3>Tekst nagłówka\nDalszy nagłówek</h3>";
local wynik=stronicowyparser_rozdzialy_modul.WierszHNumer(tekst);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local wynik="Oto jest tekst\n<h2>Tekst nagłówka Dalej Tekst nagłówka</h2>\n Tekst rozdziału\nDalszy tekst rozdziału \n<h3>Tekst nagłówka Dalszy nagłówek</h3>\n";
</syntaxhighlight>
== {{Code|p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu}} ==
Mając napis rozdziału wraz z numeracją, fukcja liczy właściwy napis i numerację w osobnych po kolei parametrach. Jest to funkcja skomplikowana analizująca, czy numeracja jest poprawna, czy nie, jeśli numeracja jest poprawna, to ona zwraca rozdział bez numeracji i samą numerację, a jeśli nie, to cały rozdział i numerację, będącą ciągiem pustym.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|rozdzial_z_numeracja}} - rozdzial z numeracją lub bez.
Zwracane wartości:
* {{Code|rozdzial}} - rozdzial bez numeracji,
* {{Code|numetracja}} - numeracja.
Przykłady użycia:
; Pierwszy{{Dk}} {{Code|z numeracją}}{{Dk}}
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local rozdzial_z_numeracja="5.1.2.3. Napis Rozdziału";
local rozdzial,numeracja=stronicowyparser_rozdzialy_modul.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local rozdzial="Napis Rozdziału";
local numeracja="5.1.2.3.";
</syntaxhighlight>
; Drugi{{Dk}} {{Code|bez numeracji}}{{Dk}}
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local rozdzial_z_numeracja="Napis Rozdziału";
local rozdzial,numeracja=stronicowyparser_rozdzialy_modul.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local rozdzial="Napis Rozdziału";
local numeracja="";
</syntaxhighlight>
== {{Code|p.CzyZerowyNapisWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy napis wprowadzenia tekstu, który nie jest dodatni, tzn. np.: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}} (czyli określony wzorem: {{Code|<nowiki>=+[^\n]*[^=]+[^\n]*=+[^%S\n]*</nowiki>}}), ani np.: linia opisywana formułą: {{Code|<nowiki>\n[:#%*;]+[^\n]*</nowiki>}}, zatem to jest przepis na definicję na tą funkcję, ale nie do końca, bo w tej funkcji pierwszy parametr nie może opisywać tego, ani tego. Funkcja zwraca dwa parametry, tzn. otrzymany rozdział i wartość: {{Code|true/false}}. Wartość {{Code|true}} mówi o rozdziale zerowym, a przeciwna wartość, że taki on nie jest. Także funkcja może zwracać wartość {{Code|nil}}, to determiniuje, że to nie jest rozdział wcale zerowy, czyli rozdział świadczący, że to jest zerowy, nie musi być wcale zerowy.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametr funkcji:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - rozważana zakodowana linia, która może być rozdziałem zerowym, ale ona nie może być dodatnia, ani ujemna,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Do liczenia rozdziału spisu treści (rzeczy) funkcja wykorzystuje z modułu {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}} - funkcja sprawdzająca {{Code|true/nil}}, czy w tekście znajduje się rozdział, który jest o nazwie typu: {{Code|Spis treści}} ({{Code|Spis rzeczy}}) - niezależnie jakimi literami napisany, ile tam jest odstępów, a do kompletowania (rozwijania) rozdziałów, służy do tego z {{Code|{{ld2|StronicowyParser/SpisTreści}}}}: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}.
Przykłady użycia (w przykładach przyjeliśmy najprostrzy wygląd tych rozdziałów, tzn. ich nie trzeba rozwijać i kompletować dalej, czyli wtedy ta funkcja jest ona w tym jedynie przypadku tożsamościowa):
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local linia="Spis treści";
local tablica_analizy_obiektow_strony_dany_modul={};
---- Ta część kodu w tym przypadku jest opcjonalna, ze względu na niekodowalną zmienną: linia;
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
---- Koniec tej części kodu;
local tablica_danych_parametrow_szablonu_strony={};
local rozdzial,czy_tak=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Funckja w tym wypadku zwraca wynik:
<syntaxhighlight lang="lua">
local rozdzial,czy_tak="Spis treści",true;
</syntaxhighlight>
Weźmy inny przykład:
<syntaxhighlight lang="lua">
---- Przykład pierwszy;
local linia="'''Nagłówek'''";
local rozdzial,czy_tak="'''Nagłówek'''",true;
---- Przykład drugi;
local linia="'''Nagłówek'''.";
local rozdzial,czy_tak="'''Nagłówek'''.",false;
</syntaxhighlight>
== {{Code|p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu}} ==
Funkcja sprawdza, czy strona jest z przedrostkiem listy: {{Code|:}}, a dla tego, czy linia jest w cudzysłowach pojedyńczych podwójnych, a jeżeli to nie jest prawda, to funkcja zwraca wynik {{Code|false}}, normalnie przy braku parametru linkowego: {{LinkPatrz|z_parametrami_linkowymi}}, lub przy jej wartości fałszywej, funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku on rewiduje, czy w lini są artykuły aktualnej ksiązki, wtedy ona zwraca wynik {{Code|false}}, a jeżeli nie, to zwracany w przeciwnym wypadku jest wynik {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLinikamiNieWoluminu(przedrotek_listy,linia,z_parametrami_linkowymi,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|przedrotek_listy}} {{Patrz|przedrotek_listy}} - przedrostek listy z linią {{Code|linia}},
* {{Code|linia}} {{LinkPatrz|linia}} - linia bez przedrostka,
* {{Code|z_parametrami_linkowymi}} {{Patrz|z_parametrami_linkowymi}} - wartość {{Code|false}}, aby nie sprawdzał właśności artykularnych artykułów na linku, wtedy funkcja na samym końcu przy sprawdzedniu tego parametru,a jeżeli ta wartość, to wtedy otrzymany wynik z funkcji to {{Code|true}}, przeciwnym funkcja idzie dalej,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, i {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}} - parametry nazw książki,
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}}.
Funckja wykorzustuje: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|NormaWzoruKodowaniaTekstu}}, {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu}}, i {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} - jak w: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local linia="''[[Książka/Artykuł|Artykuł]]''";
local tablica_analizy_obiektow_strony_dany_modul={};
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local przedrotek_listy=":";
local tablica_danych_parametrow_szablonu_strony={};
local tab_nazwa_spisow_przekierowaniowych={};
---- Tutaj funkcja zwróci wartość: true;
local czy_tak=stronicowyparser_rozdzialy_modul.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,false,"","","Książka","","",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
---- Tutaj funkcja zwróci wartość: false;
local czy_tak=stronicowyparser_rozdzialy_modul.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,true,"","","Książka","","",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
</syntaxhighlight>
== {{Code|p.HnNumerWprowadzeniaTekstu}} ==
Funkcja zwraca numer poziomu nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}. Jeśli poziom jest mniejszy niż 6, wtedy wynik zwracany tej funkcji jest liczbą stojącą przy {{Code|h}}. A gdy mamy {{Code|<nowiki><h6></nowiki>}}, jeżeli ten znacznik nie ma klasy ('''class''') atrybutu: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, to zwracane jest: 6, w przeciwnym wypadku daje to wynik, którym jest: {{Code|<liczba>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.HnNumerWprowadzeniaTekstu(nazwa,atrybuty)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa}} - nazwa tagu,
* {{Code|atrybuty}} - tabela atrybutów, których z jedną z elementów może być opcja: '''class'''.
Funkcja wykorzystuje podtablicę: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.znaczniki_wprowadzenia_tekstu}}, tablicy transportu, którego link ma referencje do jej opisu, zdefiniowany w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, definicja jej jest w:
<syntaxhighlight lang="lua">
p.znaczniki_wprowadzenia_tekstu={
["h1"]=1,
["h2"]=2,
["h3"]=3,
["h4"]=4,
["h5"]=5,
["h6"]=6,
};
</syntaxhighlight>
Funkcja posługuje się jedynie na tych typach znaczników, a nie innych.
Przykłady użycia:
; Pierwszy{{Dk}} {{Code|poziom<6}}{{Dk}}
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa="h5";
local atrybuty={};
local poziom=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty);
</syntaxhighlight>
Funkcja zwróci wynik: {{Code|5}}.
; Poziom{{Dk}} {{Code|poziom>{{=}}6}}{{Dk}}
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa="h6";
local atrybuty={};atrybuty["class"]="mw-hnumber-9";
local poziom=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty);
</syntaxhighlight>
Funkcja daje wynik: {{Code|9}}.
== {{Code|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ==
Funkcja zwraca numerację i rozdział całego rozdziału. Jest to funkcja bardzo prosta ponieważ nie analizuje numeracji, czy jest poprawnie podana, czy nie. Zawartość rozdziału musi się składać z numeracji, składający się z numerków oddzielonych kropkami - tutaj też mogą być dwie kropki koło siebie, albo numeracja może składać się z samych kropek, chociaż to jest niepoprawne, ale tak może być, na końcu numeracji może być też krokpa, po nm znajduje się właściwy rozdział zawartości tej wielkiej zawartości (rozdziału). A gdy numeracja nie istnieje, to zamiast niego zwracaną wartością jest wartość pusta.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} - zawartość rozdziału, jak w: {{LinkPatrz|zawartosc}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local zawartosc="5.1.6. Rozdział";
local numeracja,rozdzial=stronicowyparser_rozdzialy_modul.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local numeracja,rozdzial="5.1.6.","Rozdział";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
b160k1ta5g9aee6gonnwfa9id7hd03n
551210
551209
2026-08-10T13:18:28Z
Persino
2851
/* {{Code|p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu}} */
551210
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.NapisWprowadzeniaTekstu}} ==
Funkcja tworzy nagłówek rozdziału. Dla poziomu większego niż zero, ale mniejszego niż sieden zwraca nagłówek, np.: {{Code|{{=}}{{=}} Nagłówek tekstu {{=}}{{=}}}}, a dla większego niż sześć kreuje je jako, np.: {{Code|<nowiki><h6 class=\"mw-hnumber mw-hnumber-7">Nagłówek tekstu</h6></nowiki>}}. Gdy {{Code|0 < poziom <{{=}} 6}} tworzony jest taki nagłówek, że z lewej i prawej strony jest tyle minimalnie równa się, ile wskazuje poziom. A dla większego niż sześć tworzony jest nagłówek za pomocą znacznika {{Code|<nowiki><h6></nowiki>}} z klasą ogólną {{Code|mw-hnumber}} plus {{Code|mw-hnumber-<poziom>}}, gdzie {{Code|<poziom>}}, to numer danego poziomu. A więc funkcja pozwala tworzyć nagłówki o dowolnym poziomie większym niż zero, o ile {{lpg|Lua}} w {{lpr|Lua|Scribunto}} na to pozwoli, ze strony swoich ograniczeń.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.NapisWprowadzeniaTekstu(rozdzial,poziom)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|rozdzial}} - tekst wnętrza rozdziału,
* {{Code|poziom}} - numer całkowity dodatni poziomu.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local rozdzial="Tekst rozdziału";
local napis_rozdzialu1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,4);
local napis_rozdzialu2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstu(rozdzial,8);
</syntaxhighlight>
Wyniki użycia w zmiennych:
<syntaxhighlight lang="lua">
local napis_rozdzialu1="\n====Tekst rozdziału====\n";
local napis_rozdzialu2="\n<h6 class=\"mw-hnumber mw-hnumber-8\">Tekst rozdziału</h6>\n";
</syntaxhighlight>
== {{Code|p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego}} ==
Funkcja sprawdzająca, czy we podanym rozdziale, dodatnim lub ujemnym, o pewnym formacie, który musi istnieć, jako format szablonu {{s|HNumer}}, czy istnieje w nim element (obiekt), w postaci zakodowanej, o kodzie: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, który nie zawiera w sobie żadnej nowej linii, a jak nie zawiera, to czy ten element jest bezpośrednio elementem rozdziału napisanego wewnątrz tego szablonu.
Defnicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego(tekst,zawartosc,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst zawartości pierwszego parametru wspomnianego szablonu,
* {{Code|zawartość}} {{Patrz|zawartosc}} - zawartość elementu kodu,
* {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} - jaki to jest obiekt, np. {{Code|ZNACZNIK}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod danego obiektu.
Funkcja wykorzystuje do swojego liczenia instrukcję: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} {{LinkPatrz|NormaWzoruKodowaniaTekstu|StronicowyParser/Rozdziały}}, aby policzyć kod pewnego elementu mając zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}}, aby wykorzystać ta metodę.
Przykłady użycia, używając omawianego szablonu:
<syntaxhighlight lang="mediawiki">
{{HNumer|1= === Oto jest tekst <span class="plainlinks">Zawartość znacznika</span> ===}}
{{HNumer|1= * Oto jest tekst <span class="plainlinks">Zawartość znacznika</span>}}
</syntaxhighlight>
Zmienną {{Code|tekst}} w nich kolejno, które należy zakodować odpowiednio właściwą funkcją, aby otrzymać odpowiednio ich wersje zakodowane, tej zmiennej, aby móc operować tą funkcją, w przeciwnym wypadku tej funkcji nie ma sensu używać, bo otrzymamy nieprzewidywalne skutki:
<syntaxhighlight lang="lua">
local tekst="=== Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span> ===";
local tekst="* Oto jest tekst <span class=\"plainlinks\">Zawartość znacznika</span>";
</syntaxhighlight>
A {{Code|zawartosc}} kolejno, która mieści się w wersji zakodowanej zmiennej {{Code|tekst}} (tutaj mamy wersje jego niezakodowaną):
<syntaxhighlight lang="lua">
local zawartosc="Zawartość znacznika";
local zawartosc="Zawartość znacznika";
</syntaxhighlight>
W obu przykładach szablon zwraca wartość: {{Code|true}} (bo w tej ostatniej zmiennej nie ma nowej linii), pod warunkiem, że znacznik: {{Code|<nowiki><span class="plainlinks">Zawartość znacznika</span></nowiki>}}, jest zakodowany w zmiennej {{Code|tekst}}, i jest częścią zmiennej tej wersji, co jest uwidocznione kodem, według dwóch kolejnych sprawdzeń wykluczających się:
<syntaxhighlight lang="lua">
if(mw.ustring.match(tekst,"\n=+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*=+[^%S\n]*\n"))then return true;end;
if(mw.ustring.match(tekst,"\n[:#%*;]+[^\n]*"..kod_norma_wzoru_obiektu.."[^\n]*\n"))then return true;end;
</syntaxhighlight>
Widzimy, że ten znacznik musi leżeć bezpośrednio w zakodowanym tekście (to musi być zakodowane, bo w przeciwnym wypadku nie ma o czym mówić).
== {{Code|p.NapisWprowadzeniaTekstuHNumer}} ==
Generuje napis wprowadzenia tekstu według szablonu {{s|HNumer}}, w którym parametrach szablonów jest równaniowy nagłówek. Szablon dla {{Code|0 < poziom <{{=}} 6}} poziomów, np.: {{Code|{{=}}{{=}} Nagłówek Tekstu {{=}}{{=}}}}, podaje poziom napisu wprowadzenia tekstu przy pomocy funkcji: {{Code|{{sr|#p.PodajNapisPoziomuWprowadzeniaTekstu}}}}, i go zamienia na znaczniki od: {{Code|<nowiki><h1></nowiki>}} do {{Code|<nowiki><h6></nowiki>}}, a dla {{Code|poziom > 6}}, tworzy inny nagłówek, dla {{Code|<nowiki>======== Nagłówek tekstu ========</nowiki>}}, tworzy: {{Code|<nowiki><h6 class="mw-hnumber mw-hnumber-8">Nagłówek tekstu</h6></nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.NapisWprowadzeniaTekstuHNumer(parametr)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|parametr}} - napisz wprowadzenia tekstu dodatni, czyli napisany za pomocą znaku {{Code|{{=}}}}, rozdziały napisane za pomocą list, tzn. napisane tak by zaczynały się od: {{Code|<nowiki>#*:;</nowiki>}}, odpadają, inne listy znacznikowe też.
Przykłady użycia reprezentujące dwa rozłączne formy przedstawiające nagłówki, napisane tym samym sposobem:
<syntaxhighlight lang="mediawiki">
{{HNumer|1= === Nagłówek tekstu ===}}
{{HNumer|1= ======= Nagłówek tekstu =======}}
</syntaxhighlight>
Wtedy wywołania funkcyjne, a w nich parametr {{Code|parametr}} można zdefiniować dwóch w zmiennych, one są przetwarzane na odpowiednie nagłówki, ten parametr może być zakodowany, ale nie musi tak być, tak otrzymany nagłówek, równie dobrze możemy zakodować, a otrzymany tekst, aby przygotować do dalszej analizy przez inne funkcje, czy metody:
<syntaxhighlight lang="lua">
---- Nagłówki typowo dodatnie
local tekst1="=== Nagłówek tekstu ===";
local tekst2="======= Nagłówek tekstu =======";
---- Wywołania tworzące nagłówki
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local naglowek1=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst1);
local naglowek2=stronicowyparser_rozdzialy_modul.NapisWprowadzeniaTekstuHNumer(tekst2);
</syntaxhighlight>
Funkcja zamienia to kolejno je na standardowe nagłówki {{Strong|HTML}}, które reprezentują nagłówko o dowolnym poziomie, tutaj dla: {{Code|poziom > 6}}, też można tak zrobić poprzez osobne dwie klasy, tzn. klasę ogólną: {{Code|mw-hnumber}}, i szczególną: {{Code|mw-hnumber-<liczba>}}:
<syntaxhighlight lang="lua">
local naglowek1="<h3>Nagłówek tekstu</h3>";
local naglowek2="<h6 class=\"mw-hnumber mw-hnumber-8\">Nagłówek tekstu</h6>";
</syntaxhighlight>
== {{Code|p.PodajNapisPoziomuWprowadzeniaTekstu}} ==
Szablon na podstawie dowolnego nagłówka dodatniego równaniowego, tzn. o poziomie o dobrowolnej liczbie, tzn. jego poziom może być: {{Code|poziom > {{=}} 1}}, a nie {{Code|1 <{{=}} poziom <{{=}} 6 }}, równa się, czyli np.: {{Code|<nowiki>====== Tekst nagłówka ======</nowiki>}}, takie poziomy są jedynie interpretowalne przez {{Strong|MediaWiki}}, a ta funkcja również uwzględnia poziomy: {{Code|poziom > 6}}, czyli o liczbie {{Code|{{=}}}} z prawej i lewej strony nagłówka o większej liczbie niż sześć. Metoda podaje jego zawartość (nagłówek jest trimowany funkcją: {{Code|mw.text.trim}}) i poziom, jako dwa kolejne parametry zwracane, tzn. {{Code|naglowek, poziom}}, przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.PodajNapisPoziomuWprowadzeniaTekstu(linia)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - parametr przedstawiający linię rozważanego tekstu, ona może być zakodowana,
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="====== Tekst nagłówka ======";
local naglowek,poziom=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Wynikiem działania tego przykładu:
<syntaxhighlight lang="lua">
local naglowek="Tekst nagłówka";
local poziom=6;
</syntaxhighlight>
Zawartością zmiennej wchodzącej do naszej funkcji musi być sciśle od poczatku do końca nagłówek o wspomnianym formacie.
== {{Code|p.PodajTekstHNumerNapisuWprowadzeniaTekstu}} ==
Szablon podaje zawartość nagłówka rozdziału od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, i jego poziom, czyli liczba stojąca przy {{Code|h}}, tzn, jak mamy {{Code|<nowiki><h5></nowiki>}}, to tą liczbą jest {{Code|5}}. W innych przypadkach szablon zwraca zamiast liczby wartość {{Code|nil}}, np. gdy tag znacznika końcący nagłówek nie zgadza się z tym rozpoczynającym, lub gdy liczba przy {{Code|h}} jest większa niż {{Code|6}}, czyli: {{Code|<nowiki><h7></nowiki>}}, albo gdy np. mamy: {{Code|<nowiki><h67></nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.PodajTekstHNumerNapisuWprowadzeniaTekstu(linia)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - linia rozważanego tekstu, w tekście musi mieścić się ten znacznik, choćby jeden, on nie musi się rozpoczynać na samym początku, a kończyć się na samym końcu, wnętrze jego najlepiej by było zakodowane, najlepiej, by był w nim to znacznik tylko jeden w samej linii zawarty bezpośrednio tam, aby on cały był jednocześnie tą linią.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="<h5 class=\"plainlinks\">Tekst nagłówka</h5>";
local zawartosc,poziom=stronicowyparser_rozdzialy_modul.PodajTekstHNumerNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local zawartosc="Tekst nagłówka";
local poziom=5;
</syntaxhighlight>
== {{Code|p.CzyJestNapisWprowadzeniaTekstu}} ==
Funkcja podaje, czy w podanym tekście, jest jakikolwiek nagłówek dodatni, tzn. czy napisany za pomocą {{Code|{{=}}}}, tzn. np. {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, w zakodowanym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestNapisWprowadzeniaTekstu(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w którym zawarty jest jakikolwiek nagłówek, ono musi być zakodowane.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst\n== Tekst nagłówka == \n Oto jest dalszy tekst\n";
local napis_pierwszy_w_tekscie=stronicowyparser_rozdzialy_modul.CzyJestNapisWprowadzeniaTekstu(tekst);
</syntaxhighlight>
W powyższym tekście funkcja zwraca wartość równą pierwszemu wyszukiwanemu nagłówkowi, czyli:
<syntaxhighlight lang="lua">
local napis_pierwszy_w_tekscie="== Tekst nagłówka == ";
</syntaxhighlight>
Na podstawie tego wiadomo, że jakikolwiek taki nagłówek w tekście istnieje, gdyby nie było go tam wcale, to funkcja zwracałaby wartość: {{Code|nil}}.
== {{Code|p.CzyJestListaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy w tekście występuje nagłówek ujemny, czyli napis wprowadzenia tekstu, w postaci listy zaczynającej się od nowej linii: {{Code|<nowiki>[;%*:#]</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} - tekst, jak w: {{LinkPatrz|zawartosc}}, w który ma znajdować napis wprowadzenia tekstu w postaci listy.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local zawartosc="Oto jest tekst\n:* Tekst nagłóka ujemnego\n";
local lista=stronicowyparser_rozdzialy_modul.CzyJestListaNapisuWprowadzeniaTekstu(zawartosc);
</syntaxhighlight>
Funkcja zwraca wartość niepustą łańcuchową powiadamiającą, że taka lista istnieje, czyli w tym przypadku: {{Code|<nowiki>\n:*</nowiki>}}.
== {{Code|p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu}} ==
Funkcja sprawdzająca, czy w tekście jest jakolwiek nagłówek podany w postaci równaniowej lub nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}.
Definicja skrótowa funkcji
<syntaxhighlight lang="lua">
function p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wiersz}} - czy w tekście jest wiersz z takim opisywanym nagłókiem.
Funkcja używa do sprawdzenia: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} (czy to jest rozdział dodatni) i {{Code|{{sr|#p.PodajTekstHNumerNapisuWprowadzeniaTekstu|b=tak}}}} (czy ujemny).
Przykłady funkcji:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst1="====== Tekst nagłówka ======";
local tekst2="<h5 class=\"plainlinks\">Tekst nagłówka</h5>";
local czy_jest_naglowek1,jaki_naglowek1=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst1);
local czy_jest_naglowek2,jaki_naglowek2=stronicowyparser_rozdzialy_modul.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(tekst2);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local czy_jest_naglowek1,jaki_naglowek1=true,true;
local czy_jest_naglowek2,jaki_naglowek2=true,false;
</syntaxhighlight>
== {{Code|p.WierszHNumer}} ==
Funkcja w nagłówkach od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, usuwa w nich nowe linie, zamieniając je po kolei na spację, i dodaje z lewej (przed znacznikiem) i prawej (po) strony tego nagłówka znak nowej linii: {{Code|\n}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.WierszHNumer(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - parametr z tymi nagłówkami.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst<h2>Tekst nagłówka\nDalej Tekst nagłówka</h2> Tekst rozdziału\nDalszy tekst rozdziału <h3>Tekst nagłówka\nDalszy nagłówek</h3>";
local wynik=stronicowyparser_rozdzialy_modul.WierszHNumer(tekst);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local wynik="Oto jest tekst\n<h2>Tekst nagłówka Dalej Tekst nagłówka</h2>\n Tekst rozdziału\nDalszy tekst rozdziału \n<h3>Tekst nagłówka Dalszy nagłówek</h3>\n";
</syntaxhighlight>
== {{Code|p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu}} ==
Mając napis rozdziału wraz z numeracją, fukcja liczy właściwy napis i numerację w osobnych po kolei parametrach. Jest to funkcja skomplikowana analizująca, czy numeracja jest poprawna, czy nie, jeśli numeracja jest poprawna, to ona zwraca rozdział bez numeracji i samą numerację, a jeśli nie, to cały rozdział i numerację, będącą ciągiem pustym.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|rozdzial_z_numeracja}} - rozdzial z numeracją lub bez.
Zwracane wartości:
* {{Code|rozdzial}} - rozdzial bez numeracji,
* {{Code|numetracja}} - numeracja.
Przykłady użycia:
; Pierwszy{{Dk}} {{Code|z numeracją}}{{Dk}}
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local rozdzial_z_numeracja="5.1.2.3. Napis Rozdziału";
local rozdzial,numeracja=stronicowyparser_rozdzialy_modul.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local rozdzial="Napis Rozdziału";
local numeracja="5.1.2.3.";
</syntaxhighlight>
; Drugi{{Dk}} {{Code|bez numeracji}}{{Dk}}
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local rozdzial_z_numeracja="Napis Rozdziału";
local rozdzial,numeracja=stronicowyparser_rozdzialy_modul.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local rozdzial="Napis Rozdziału";
local numeracja="";
</syntaxhighlight>
== {{Code|p.CzyZerowyNapisWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy napis wprowadzenia tekstu, który nie jest dodatni, tzn. np.: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}} (czyli określony wzorem: {{Code|<nowiki>=+[^\n]*[^=]+[^\n]*=+[^%S\n]*</nowiki>}}), ani np.: linia opisywana formułą: {{Code|<nowiki>\n[:#%*;]+[^\n]*</nowiki>}}, zatem to jest przepis na definicję na tą funkcję, ale nie do końca, bo w tej funkcji pierwszy parametr nie może opisywać tego, ani tego. Funkcja zwraca dwa parametry, tzn. otrzymany rozdział i wartość: {{Code|true/false}}. Wartość {{Code|true}} mówi o rozdziale zerowym, a przeciwna wartość, że taki on nie jest. Także funkcja może zwracać wartość {{Code|nil}}, to determiniuje, że to nie jest rozdział wcale zerowy, czyli rozdział świadczący, że to jest zerowy, nie musi być wcale zerowy.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametr funkcji:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - rozważana zakodowana linia, która może być rozdziałem zerowym, ale ona nie może być dodatnia, ani ujemna,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Do liczenia rozdziału spisu treści (rzeczy) funkcja wykorzystuje z modułu {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}} - funkcja sprawdzająca {{Code|true/nil}}, czy w tekście znajduje się rozdział, który jest o nazwie typu: {{Code|Spis treści}} ({{Code|Spis rzeczy}}) - niezależnie jakimi literami napisany, ile tam jest odstępów, a do kompletowania (rozwijania) rozdziałów, służy do tego z {{Code|{{ld2|StronicowyParser/SpisTreści}}}}: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}.
Przykłady użycia (w przykładach przyjeliśmy najprostrzy wygląd tych rozdziałów, tzn. ich nie trzeba rozwijać i kompletować dalej, czyli wtedy ta funkcja jest ona w tym jedynie przypadku tożsamościowa):
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local linia="Spis treści";
local tablica_analizy_obiektow_strony_dany_modul={};
---- Ta część kodu w tym przypadku jest opcjonalna, ze względu na niekodowalną zmienną: linia;
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
---- Koniec tej części kodu;
local tablica_danych_parametrow_szablonu_strony={};
local rozdzial,czy_tak=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Funckja w tym wypadku zwraca wynik:
<syntaxhighlight lang="lua">
local rozdzial,czy_tak="Spis treści",true;
</syntaxhighlight>
Weźmy inny przykład:
<syntaxhighlight lang="lua">
---- Przykład pierwszy;
local linia="'''Nagłówek'''";
local rozdzial,czy_tak="'''Nagłówek'''",true;
---- Przykład drugi;
local linia="'''Nagłówek'''.";
local rozdzial,czy_tak="'''Nagłówek'''.",false;
</syntaxhighlight>
== {{Code|p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu}} ==
Funkcja sprawdza, czy strona jest z przedrostkiem listy: {{Code|:}}, a dla tego, czy linia jest w cudzysłowach pojedyńczych podwójnych, a jeżeli to nie jest prawda, to funkcja zwraca wynik {{Code|false}}, normalnie przy braku parametru linkowego: {{LinkPatrz|z_parametrami_linkowymi}}, lub przy jej wartości fałszywej, funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku on rewiduje, czy w lini są artykuły aktualnej ksiązki, wtedy ona zwraca wynik {{Code|false}}, a jeżeli nie, to zwracany w przeciwnym wypadku jest wynik {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLinikamiNieWoluminu(przedrotek_listy,linia,z_parametrami_linkowymi,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|przedrotek_listy}} {{Patrz|przedrotek_listy}} - przedrostek listy z linią {{Code|linia}},
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia bez przedrostka,
* {{Code|z_parametrami_linkowymi}} {{Patrz|z_parametrami_linkowymi}} - wartość {{Code|false}}, aby nie sprawdzał właśności artykularnych artykułów na linku, wtedy funkcja na samym końcu przy sprawdzedniu tego parametru,a jeżeli ta wartość, to wtedy otrzymany wynik z funkcji to {{Code|true}}, przeciwnym funkcja idzie dalej,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}}, {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}}, i {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}} - parametry nazw książki,
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Funckja wykorzustuje: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|NormaWzoruKodowaniaTekstu|StronicowyParser/Rozdziały}}, {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}, i {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} - jak w: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local linia="''[[Książka/Artykuł|Artykuł]]''";
local tablica_analizy_obiektow_strony_dany_modul={};
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local przedrotek_listy=":";
local tablica_danych_parametrow_szablonu_strony={};
local tab_nazwa_spisow_przekierowaniowych={};
---- Tutaj funkcja zwróci wartość: true;
local czy_tak=stronicowyparser_rozdzialy_modul.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,false,"","","Książka","","",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
---- Tutaj funkcja zwróci wartość: false;
local czy_tak=stronicowyparser_rozdzialy_modul.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu(przedrotek_listy,linia,true,"","","Książka","","",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
</syntaxhighlight>
== {{Code|p.HnNumerWprowadzeniaTekstu}} ==
Funkcja zwraca numer poziomu nagłówka od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}. Jeśli poziom jest mniejszy niż 6, wtedy wynik zwracany tej funkcji jest liczbą stojącą przy {{Code|h}}. A gdy mamy {{Code|<nowiki><h6></nowiki>}}, jeżeli ten znacznik nie ma klasy ('''class''') atrybutu: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, to zwracane jest: 6, w przeciwnym wypadku daje to wynik, którym jest: {{Code|<liczba>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.HnNumerWprowadzeniaTekstu(nazwa,atrybuty)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa}} - nazwa tagu,
* {{Code|atrybuty}} - tabela atrybutów, których z jedną z elementów może być opcja: '''class'''.
Funkcja wykorzystuje podtablicę: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.znaczniki_wprowadzenia_tekstu}}, tablicy transportu, którego link ma referencje do jej opisu, zdefiniowany w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, definicja jej jest w:
<syntaxhighlight lang="lua">
p.znaczniki_wprowadzenia_tekstu={
["h1"]=1,
["h2"]=2,
["h3"]=3,
["h4"]=4,
["h5"]=5,
["h6"]=6,
};
</syntaxhighlight>
Funkcja posługuje się jedynie na tych typach znaczników, a nie innych.
Przykłady użycia:
; Pierwszy{{Dk}} {{Code|poziom<6}}{{Dk}}
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa="h5";
local atrybuty={};
local poziom=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty);
</syntaxhighlight>
Funkcja zwróci wynik: {{Code|5}}.
; Poziom{{Dk}} {{Code|poziom>{{=}}6}}{{Dk}}
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa="h6";
local atrybuty={};atrybuty["class"]="mw-hnumber-9";
local poziom=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty);
</syntaxhighlight>
Funkcja daje wynik: {{Code|9}}.
== {{Code|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ==
Funkcja zwraca numerację i rozdział całego rozdziału. Jest to funkcja bardzo prosta ponieważ nie analizuje numeracji, czy jest poprawnie podana, czy nie. Zawartość rozdziału musi się składać z numeracji, składający się z numerków oddzielonych kropkami - tutaj też mogą być dwie kropki koło siebie, albo numeracja może składać się z samych kropek, chociaż to jest niepoprawne, ale tak może być, na końcu numeracji może być też krokpa, po nm znajduje się właściwy rozdział zawartości tej wielkiej zawartości (rozdziału). A gdy numeracja nie istnieje, to zamiast niego zwracaną wartością jest wartość pusta.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} - zawartość rozdziału, jak w: {{LinkPatrz|zawartosc}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local zawartosc="5.1.6. Rozdział";
local numeracja,rozdzial=stronicowyparser_rozdzialy_modul.NumeracjaOrazTekstWprowadzeniaTekstu(zawartosc);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local numeracja,rozdzial="5.1.6.","Rozdział";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
7knerw1mrztq8ay5yxks3h30wm6sy4u
Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom III
4
63905
551211
2026-08-10T13:20:21Z
Persino
2851
Utworzono nową stronę „<noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude>”
551211
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
c0m8yweal5b9gim3n01w9tm53e39mkw
551213
551211
2026-08-10T13:26:38Z
Persino
2851
551213
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
h6dd5ixs0yyer26wkhkssopmpfikexh
551214
551213
2026-08-10T13:32:43Z
Persino
2851
/* {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} */
551214
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
5xc77qlx0e5pggdymvpdd3jctwdgi3r
551215
551214
2026-08-10T13:33:59Z
Persino
2851
/* {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} */
551215
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
9oycq1rhj9f8q41768c46tq13aosgal
551216
551215
2026-08-10T13:34:47Z
Persino
2851
/* {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} */
551216
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
dy4et9wvant4qzchml190gusn4kcfsd
551217
551216
2026-08-10T13:35:16Z
Persino
2851
/* {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} */
551217
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
cvh7smiy2lqfv2vx9afxijf9qdq5uez
551218
551217
2026-08-10T13:35:49Z
Persino
2851
/* {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} */
551218
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
350zhx7enmi3a9xoljznzo9buqpm560
551219
551218
2026-08-10T13:37:56Z
Persino
2851
/* {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} */
551219
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
1gov52axjf0iheov9xox4gl9liz99kv
551220
551219
2026-08-10T13:42:12Z
Persino
2851
551220
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
2d9472xisi4wfck7eqihdd1m41cb55s
551221
551220
2026-08-10T13:45:07Z
Persino
2851
/* {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} */
551221
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
56cj22gjw9up5pnymdfpd8aeiyc93ix
551222
551221
2026-08-10T13:47:27Z
Persino
2851
/* {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} */
551222
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
1mbekoq6nsj8d0sdxtaf434s6ipgpsu
551223
551222
2026-08-10T13:48:12Z
Persino
2851
/* {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} */
551223
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
4cya2wx20lzp97uqm1glr2n6oj1xo9o
551224
551223
2026-08-10T13:49:36Z
Persino
2851
/* {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} */
551224
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|kod}} {{LinkPatrz|kod}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
sivv6lz6dtbtqfvfed2zslrgck1yp4x
551225
551224
2026-08-10T13:50:58Z
Persino
2851
/* {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} */
551225
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|kod}} {{LinkPatrz|kod}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
majfdk4cmaskfndd684u5db7kq37h6d
551226
551225
2026-08-10T13:52:31Z
Persino
2851
/* {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} */
551226
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
cyd56ujhdmhhddfeddna32pdbocrgir
551227
551226
2026-08-10T13:53:34Z
Persino
2851
/* {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} */
551227
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
0hf66y9bhi57qew5vk907xjweveregw
551351
551227
2026-08-11T02:50:16Z
Persino
2851
551351
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
lnyji2pghkqleltcgzqalt3wvbf8tt0
551352
551351
2026-08-11T03:04:05Z
Persino
2851
/* {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} */
551352
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.CzyJestJakikolwiekLinkArtykularnyTekstu}} ==
Funkcja sprawdza na podstawie artykułu spisu treści, czy są w nim linki artykularne, które generują szablony, w postaci: {{s|SpisTreści}}, {{s|Sekcja referencyjna}} (lub jego skrót: {{s|Sr}}), {{s|Link wewnętrzny}} (lub jego skrót: {{s|Ly}}), {{s|LinkOgólne}} (lub jego skrót: {{s|Lo}}), czyli linki według tabeli {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.linki_szablony_elementy_spisu_rzeczy={
["SpisTreści"]=true,
["Sekcja referencyjna"]=true,
["Sr"]=true,
["Link wewnętrzny"]=true,
["Ly"]=true,
["LinkOgólne"]=true,
["Lo"]=true,
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Albo inne generujące części spisu treści: {{s|SpisPozycja}} i {{s|SpisZw}}, na podstawie, które są elementami z {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}:
<syntaxhighlight lang="lua">
p.inne_linki_szablony_elementy_spisu_rzeczy={
["SpisPozycja"]={true,numer_link="tyt",},
["SpisZw"]={false,numer=1,link=2,},
};
</syntaxhighlight>
Tablica opisana w: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}}. Te tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
Bądź szablony linków inteligentnych. Ewentualnie ich skróty, artykułów sprawdzane przy pomocy funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, te szablony mieszczą się w kategorii: {{Code|{{lk2|Szablony linków inteligentnych}}}}, i ich skróty w: {{Code|{{lk2|Przekierowania skrótów do szablonów linków inteligentnych}}}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do sprawdzenia, czy zawiera zakodowane linki artykularne, w postaci szablonów,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}.
Funkcja wykorzystuje:
* {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}},
* {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=Szablonowe}}}} - jednocześnie można powiedzieć, że on sprawdza, czy to jest link inteligentny.
Przykład użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Oto jest tekst {{lpg|Artykuł|Nazwa artykułu}}.\n Oto jest dalszy tekst. {{lu|Artykuł/Podstrona}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
local tablica_danych_parametrow_szablonu_strony={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Powyższe wywołanie zwróci wynik {{Code|true}}. W niej tekst był kodowany przy pomocy funkcji: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}, a póżniej był liczony wynik z dyskutowanej funkcji.
== {{Code|p.CzyJestInnySpecjalnyTekstowyObiekt}} ==
Funkcja sprawdza, czy jest obiekt zakodowany o kodzie: {{Code|INNEPRE}}, {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|MATH}}, {{Code|GALERIA}} i {{Code|MAPAOBRAZU}}, a co oznaczają te kody to można zobaczyć w: {{sr|Szablonowe|dokumentacji modułu Szablonowe}}, wtedy funkcja zwraca wynik {{Code|true}}, w przeciwnym wypadku {{Code|false}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - tekst do policzenia, zawierające elementy z omawianymi kodami,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja używa iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} - jak w: {{LinkPatrz|IteratorSzablonowyZakodowanegoTekstu|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="\n Oto jest tekst z INNEPRE.\n<pre>Oto jest tekst z PRE</pre>\nOto jest dalszy tekst ze wzorem MATH: <MATH>c^2=a^2+b^2</MATH>.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local czy_tak_wynik=stronicowyparser_rozdzialy_modul.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul);
</syntaxhighlight>
Funkcja zwraca wynik {{Code|true}}. Aby policzyć ten wynik należy wykorzystać funkcję kodującą: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu|StronicowyParser/Rozdziały}}.
== {{Śródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}{{Code|p.__FUNKCJA_KOMPLETOWANIA}} ==
Funkcja kompletowania, sprawdza, czy nazwa szablonu jest jedna z wielu, tzn.: {{s|Kompletność}}, {{s|Kompletność krótka}}, {{s|Kompletność junior}} i {{s|Książka}}, wtedy zwraca wartość: {{Code|true}}, w przeciwnym wypadku: {{Code|nil}}, a tabela dzięki to wszystko się dzieje, przedstawia się w formie:
<syntaxhighlight lang="lua">
p.szablony_kompletowania_stron_woluminu={
["Kompletność"]=true,
["Kompletność krótka"]=true,
["Kompletność junior"]=true,
["Książka"]=true,
};
</syntaxhighlight>
Ta tabela mieści się w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}}, wraz z innymi tabelami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla jego typu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, potrzebny do poprzedniej tabeli.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local nazwa_szablonu="Kompletność krótka";
local czy_wynik=stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA(nil,nazwa_szablonu,nil,nil,nil);
</syntaxhighlight>
Funkcja w tym przypadku zwróci wynik: {{Code|true}}, bo ta podana nazwa strony należy do naszej tabeli.
== {{Code|p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu}} ==
Funkcja usuwa dolne myślniki i odstępy na końcach podanego tekstu oraz zamienia kolejne je wewnątrz tekstu na jeden dolny myślnik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} - tekst do przerobienia.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst=" ____ ___ Tekst_________________ _______nagłówka ___ ___ ___ strony ___ ___";
tekst=stronicowyparser_rozdzialy_modul.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst);
</syntaxhighlight>
Uzyskano wyniki:
<syntaxhighlight lang="lua">
tekst="Tekst_nagłówka_strony";
</syntaxhighlight>
== {{Code|p.ObiektySzablonoweFormatowaniaTekstu}} ==
Funkcja, która zastępuje szablony ich ściśle okreslonymi parametrami, ale nie normalnie wszystkimi, według danych, które zwykle są tabelami z modulu: {{Code|{{ld2|StronicowyParser/obiekty}}}}, ale nie zawsze, bo taką tabelę można skonstrułować i włanorecznie podać do tej procedury.
Przykładową tą tabelą, którą można znaleźć pod tym modułem, o którym wspomnialiśmy, jest {{Patrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}:
<syntaxhighlight lang="lua">
p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu={
["Kolumny"]=2,---- Tutaj parametry, więcej niż jeden, oddzielamy średnikami, ale tutaj mamy jedynie jeden parametr, więc średniki nie są tutaj potrzebne;
};
</syntaxhighlight>
Jest to tablica zdefiniowana w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, opisana w: {{Code|{{sr|#p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - szablon, który chcemy zastąpić odpowiednimi, nie wszystkimi, jego parametrami,
* {{Code|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}} - tabela informująca, które parametry szablonu należy zastąpić parametrami, tutaj parametry są oddzielone średnikami,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod, dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, będący jednocześnie częścią kodów bazy, czyli: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{Kolumny|2|Oto jest tekst tego szablonu}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=mw.loadData("Module:StronicowyParser/obiekty").szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Uzyskane wyniki: {{Code|Oto jest tekst tego szablonu}}.
== {{Code|p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu}} ==
Szablon zamieniający wywołania szablonów w tekście na ich odpowiednie wartości, które przedstawiają się za pomocą dodatków o ogólnym wzorze: {{Code|(<name>)}}. Przykładowa tabela z tymi dodatkami jest w: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a w nim tabela:
<syntaxhighlight lang="lua">
p.szablony_z_dodatkiem_obiektowym={
["ISBN"]="ISBN $(1)";
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_z_dodatkiem_obiektowym|p=StronicowyParser/obiekty}}}}. Pierwszym elementem (kluczem) jest nazwa szablonu, a wartością tego elementu jest przepis, jak zastąpić ten szablon nim, a właściwie w nim dodatek, robiąc jeszcze dodatkowe operacje.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/Rozdziały}} - zakodowany szablon, z możliwym dodatkiem, w nazwie szablonu,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/Rozdziały}} - kod dla obiektu {{Code|SZABLON}} {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}.
Funkcja na podstawie użytych elementów z: {{Code|{{ld2|Techniczne}}}}, wykonuje operacje na parametrach, używając procedur dla nazw argumentów: {{Code|{{sr|#p["PrzekształćWzórDoCzystegoTekstu"]|p=Techniczne}}}}, i jego wartościach: {{Code|{{sr|#p["TekstBezOdwołańDoParametrówWeWzorze"]|p=Techniczne}}}}, zamieniając elementy typu: {{Code|(<name>)}}, gdzie {{Code|name}}, to nazwa argumentu, na ich wartości.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablon="{{ISBN|83-8678-825-9}}";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
szablon=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
local tablica_danych_parametrow_szablonu_strony={};
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul);
local tekst="";
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
tekst=stronicowyparser_rozdzialy_modul.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,"",tablica_danych_parametrow_szablonu_strony,kod)..tekst;
end;
end;
</syntaxhighlight>
Wynikiem działania tego przykładu, ukryty pod przykładem pod zmienną {{Code|tekst}}, przedstawiamy na podstawie tekstu, którym jest wywołanie szablonu: {{Code|{{s|ISBN|83-8678-825-9}}}}, którym jest ukryty pod zmienną {{Code|szablon}}, w wyniku działania tej funkcji, zamieniany jest on na: {{Code|ISBN 83-8678-825-9}}.
== {{Code|p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii}} ==
Funkcja zamienia znaczniki nowej linii: {{Code|<nowiki><br /></nowiki>}} i kreski poziomej {{Code|<nowiki><hr /></nowiki>}}, a także szablony, ich odpowiedniki wersji znacznikowych, tzn. kolejno: {{Code|{{s|Br}}}} i {{Code|{{s|Hr}}}}, na jedną wartość: {{Code|\n\n }} (który charakteryzuje trzy linie, ostatnia linia ma początku ma spację, aby ona przypadkiem nie była traktowana, jako np. rozdział), ustaloną przez nią.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="Tekst przed{{Br}}, tekst po <br />, a po nim znacznik: <hr />, i szablon {{Hr}}.";
local tablica_analizy_obiektow_strony_dany_modul={};
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
</syntaxhighlight>
Zwrócone wyniki:
<syntaxhighlight lang="lua">
local tekst="Tekst przed\n\n , tekst po \n\n , a po nim znacznik: \n\n , i szablon \n\n .";
</syntaxhighlight>
== {{Code|p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia}} ==
Funkcja łączy linie w jedną linię, pomiędzy liniami, które nie udało się połączyć z nimi, a jakie to są linie, otóż te, które reprezentują rozdziały, takie jak: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, i linie reprezentowane przez listy, które zaczynają się na: {{Code|<nowiki>[;%*:#]</nowiki>}}. Też nie zostaną połączone z innymi, które zawierają szablony: {{Code|{{s|SpisPozycja}}}}, {{Code|{{s|SpisZw}}}} i {{Code|{{s|SpisTreści}}}}, te szablony sa umieszczone w tabeli, na stronie: {{Code|{{ld2|StronicowyParser/obiekty}}}}, tzn.:
<syntaxhighlight lang="lua">
p.szablony_w_nie_w_tej_samej_linii={
["SpisPozycja"]=true,
["SpisZw"]=true,
["SpisTreści"]=true,
};
</syntaxhighlight>
Tabela opisana w: {{Code|{{sr|#p.szablony_w_nie_w_tej_samej_linii|p=StronicowyParser/obiekty}}}}. Funkcja w wewnątrz linii każdy znacznik: {{Code|<nowiki><br /></nowiki>}} lub {{Code|<nowiki><hr /></nowiki>}} albo {{Code|{{s|Br}}}} lub {{Code|{{s|Hr}}}}, zamienia na {{Code|\n\n }} (przy pomocy funkcji: {{Code|{{sr|#p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii|b=tak}}}}), co potem odpowiada trzem liniom, linia pośrodku jest pusta (lub biała), a jeżeli taki znacznik szablonowy, czy znacznikowy, jest na końcu linii, czyli po prostu, wtedy mamy, jeśli: {{Code|<nowiki>^(.*\n)[^%S\n]*\n[^%S\n]*$</nowiki>}}, co odpowiada dwom oddzielnym liniom, na jakie dzielona jest ona, w końcowym tekście.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_USUWANIE_BAZOWE)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst}} {{LinkPatrz|tekst|StronicowyParser/Rozdziały}} - zakodowany tekst, na którym operujemy,
* {{Code|nazwa_modulu}} - jak w: {{LinkPatrz|nazwa_modulu|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_obiektow_strony_dany_modul_uzyskany}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} - jak w: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tekst="== Tekst rozdziału ==\nTekst Rozdziału{{Br}}\nTekst rozdziału\nTekst rozdziału\n*# Tekst rodziału\n Tekst rozdziału\n";
local tablica_analizy_obiektow_strony_dany_modul={};
local szablonowe_modul=require("Module:Szablonowe");
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
local tablica_danych_parametrow_szablonu_strony={};
tekst=stronicowyparser_rozdzialy_modul.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nil,"",tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nil,nil);
</syntaxhighlight>
Zwracane wyniki:
<syntaxhighlight lang="lua">
local tekst="== Tekst rozdziału ==\nTekst Rozdziału\nTekst rozdziału Tekst rozdziału\n*# Tekst rodziału\n'\"`UNIQ--INNEPRE-1-QINU`\"'";
</syntaxhighlight>
j3nfzyffl4hdkt83yfyny3zs23np0n8
Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom IV
4
63906
551229
2026-08-10T13:56:56Z
Persino
2851
Utworzono nową stronę „<noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} == Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zw…”
551229
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
nch1bgat5v7vfjymex6rzm43k6m13bv
551230
551229
2026-08-10T13:59:05Z
Persino
2851
551230
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
dsqzn7iu9axz2trcu78pat3w8x6ih5t
551231
551230
2026-08-10T14:01:51Z
Persino
2851
/* Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe */
551231
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
t5mniadqps9uxvw9rmqjf4j7lw07276
551232
551231
2026-08-10T14:02:16Z
Persino
2851
/* Znaczniki wprowadzenia tekstu */
551232
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom III}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
mym0451cx7mmo4tydqmi33gp53k15ey
551233
551232
2026-08-10T14:03:29Z
Persino
2851
/* Znaczniki wprowadzenia tekstu */
551233
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
8bqizylo5te8tmn3hjfkf4o5jyevuof
551234
551233
2026-08-10T14:04:33Z
Persino
2851
/* {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} */
551234
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
06ybq5qcke0au7t1oopezg2f1zjtihm
551235
551234
2026-08-10T14:12:48Z
Persino
2851
/* Specjalne obiekty zwracane przez iterator w pewnej zmiennej */
551235
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
55tca8f0hkg0vbhj2f08yepgdszusgl
551236
551235
2026-08-10T14:15:22Z
Persino
2851
/* {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} */
551236
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/Rozdziały}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
6h3ng2cnezx2yy1s0w9yungly3seean
551237
551236
2026-08-10T14:18:05Z
Persino
2851
/* {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} */
551237
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
l7lg43vv968eb1fg0is5quzxbte50cl
551238
551237
2026-08-10T14:18:51Z
Persino
2851
/* Szablony i znaczniki, wyróżniające linie, które są rozdziałami */
551238
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
ay7vuhvjn9pdpvg7iynk501ixpt6joi
551239
551238
2026-08-10T14:20:23Z
Persino
2851
/* Szablony, z których z których zostawiane są tylko zawartości */
551239
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
70em95jqym9g0weyb4eky1u47pelsl9
551240
551239
2026-08-10T14:21:39Z
Persino
2851
/* Opis dalszy funkcji */
551240
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej|StronicowyParser/Rozdziały}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
haf2jnsow2ga9yz5rxbm2o4x7pldu29
551241
551240
2026-08-10T14:23:48Z
Persino
2851
/* Opis dalszy funkcji */
551241
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
9oms7ph0s6qpu4ncio38wyj77zb41mh
551242
551241
2026-08-10T14:26:13Z
Persino
2851
/* {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} */
551242
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
srndhakpdfav1dxvt60uhe4ij8qjqs9
551243
551242
2026-08-10T14:27:15Z
Persino
2851
/* {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} */
551243
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
7vc9aljfzyqldyjqgp7ka7lelkhbtnj
551244
551243
2026-08-10T14:29:19Z
Persino
2851
/* {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} */
551244
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
f88se0okv04xl5soyv7168eqw2h85hd
551245
551244
2026-08-10T14:31:40Z
Persino
2851
/* {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} */
551245
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
t798me88nrlq1xm270nf1847dku41q7
551246
551245
2026-08-10T14:32:20Z
Persino
2851
/* {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} */
551246
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom III}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
nag2230l1hcjefravuue6hqzxaw4x51
551247
551246
2026-08-10T14:33:22Z
Persino
2851
/* {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} */
551247
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
8t59o2siykypiumdr215wfx32q6w1k0
551248
551247
2026-08-10T14:34:35Z
Persino
2851
/* {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} */
551248
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
p2oclxv2k7xd1kprugk18lx7ia4elni
551249
551248
2026-08-10T14:36:47Z
Persino
2851
/* Zmiana tekstu krok 1 */
551249
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE|StronicowyParser/Rozdziały}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
n3p3pbusiuicmi3x6revg5m26ay78h5
551250
551249
2026-08-10T14:37:22Z
Persino
2851
/* Zmiana tekstu krok 1 */
551250
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
cxjs2uxmnfwkkxhpsl7mfpiu9k9wltb
551251
551250
2026-08-10T14:37:46Z
Persino
2851
/* Zmiana tekstu krok 1 */
551251
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
67qt4bqy2ru09gtzg8otcp07p3ty1ar
551252
551251
2026-08-10T14:38:51Z
Persino
2851
/* Zmiana tekstu krok 1 */
551252
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
1a4wkw3rt1bcdaf6rtehe59f7q80fmx
551253
551252
2026-08-10T14:39:27Z
Persino
2851
/* Zmiana tekstu krok 1 */
551253
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
5jnelnpj0vmd3wpur7pkjnspjlnxh6o
551254
551253
2026-08-10T14:40:20Z
Persino
2851
/* Zmiana tekstu krok 1 */
551254
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
gfun3po71usjha5gre08t6ye9k5ye37
551255
551254
2026-08-10T14:43:54Z
Persino
2851
/* Zmiana tekstu krok 1 */
551255
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
8wdjhvqdq33pa8t84nth32b7tlz8hma
551256
551255
2026-08-10T14:45:25Z
Persino
2851
/* Zmiana tekstu krok 1 */
551256
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
5gz1f68w3rgqmfb4powq0wbj5o5qgd3
551257
551256
2026-08-10T14:46:20Z
Persino
2851
/* Zmiana tekstu krok 3 */
551257
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
9sy8gp85dr8iy222w0pu0ikkptgz6j2
551258
551257
2026-08-10T14:47:08Z
Persino
2851
/* Kod wspólny */
551258
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
lu6nw3rxxsgkycitr5784t44dwajsq3
551259
551258
2026-08-10T14:48:19Z
Persino
2851
/* {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} */
551259
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
539o3ug41tbzq50orqmloi0dyzxwrku
551260
551259
2026-08-10T14:49:51Z
Persino
2851
/* {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} */
551260
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
sq01fxacrejue16k3yvfqy3epe1qfaz
551261
551260
2026-08-10T14:53:15Z
Persino
2851
/* Kod dalszy funkcji */
551261
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
p8mn47jlnca90ep1yxa1qbw5v0e1llz
551262
551261
2026-08-10T14:55:03Z
Persino
2851
/* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */
551262
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
bj3ljq89k6ug7ax9wtilxu6rotbqz5s
551263
551262
2026-08-10T14:56:54Z
Persino
2851
/* Wartości zwracane przez iterator */
551263
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
3arjbqobzi444z3arwty5m64e3ne63f
551264
551263
2026-08-10T15:02:57Z
Persino
2851
551264
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane. Numerki przy wartoąciach tą są numery parametrów, które przedstawiają ich zawartości.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
pr37lfuq0qn0s739fqgu2jqbzm9std8
551266
551264
2026-08-10T17:44:06Z
Persino
2851
/* Znaczniki szablonowe */
551266
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
ncvytep1i2wowzvb1isd1bndp7bkhgx
551269
551266
2026-08-10T17:59:44Z
Persino
2851
/* Brak obiektów specjalnych linii, które sugwrują, że to nie jest jednak rozdział */
551269
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też sprawdza, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja w takich przypadkach może zwrócić informację, że to jest jjednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości n ilowej, że jednak nim nie jest.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
ajkdxgiaeebkn0mz094kerm9iatz0c5
551270
551269
2026-08-10T18:02:03Z
Persino
2851
/* Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział */
551270
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja,jeżeli wezła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinKPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
q2cr0jgm80wnwwtumv7bwvb8vwddmdb
551271
551270
2026-08-10T18:03:23Z
Persino
2851
/* Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem */
551271
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany, wtedy jego poziom rozdzialu - trzeci parametr zwracany, przyjmuje wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja,jeżeli wezła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
f0o96xcto3kdrunl49r21z9mmozns7l
551274
551271
2026-08-10T18:53:24Z
Persino
2851
/* Wartości zwracane przez funkcję w przypadku wykrycia rozdziału */
551274
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja,jeżeli wezła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
40721vl4r6hz29lzn1grre2llawtilu
551275
551274
2026-08-10T18:56:47Z
Persino
2851
/* Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział */
551275
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a z wartością {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
k7k2u5vo9nyt633p6f1hsw7vutee73w
551276
551275
2026-08-10T19:15:12Z
Persino
2851
/* {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} */
551276
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Fukcja zwraca tekst zmodyfikowany lub jego bazę z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
pn9pxunyu27t90w7zkduowxdj9et8pq
551277
551276
2026-08-10T19:17:17Z
Persino
2851
/* {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} */
551277
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
a99sz6z1a4mg2bcwmawkiqq92hvzyzz
551280
551277
2026-08-10T19:57:30Z
Persino
2851
/* {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} */
551280
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalszymo wartościami zwracanymi są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
59xtez20oyw02mx3y6896krqh5zjwok
551281
551280
2026-08-10T20:02:49Z
Persino
2851
/* {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} */
551281
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamianajest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez fukcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
c9qy2hs8k5qquwmn4dz2jdmz4fukxw3
551283
551281
2026-08-10T20:13:33Z
Persino
2851
/* Specjalne obiekty zwracane przez iterator w pewnej zmiennej */
551283
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|trimowanie}} - czy jest włączone trimowanie komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest wyłączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
tjxkij331pngyadxj5g5zttjgd6i3p8
551285
551283
2026-08-10T21:03:31Z
Persino
2851
/* {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} */
551285
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, i uruchamiamy funkcję: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, do kompletowania w taki sposób, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a jeśli nie zwróci, to ten parametr nie jest kompletowany, w przeciwnym wypadku jest zastępowany jego zawartością odpowiednio zakodowaną. A zaraz przed nią zmienna {{Code|czy_modyfikacja}} przybiera wartość {{Code|true}}.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
h7lwo7w63akpnzbh0qr03m3tlownkfi
551286
551285
2026-08-10T21:30:51Z
Persino
2851
/* Zmiana tekstu krok 1 */
551286
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, przeciwnie jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
g9fcusb7ziv7a6953hlcn4y3vtvfzd2
551287
551286
2026-08-10T21:36:57Z
Persino
2851
/* Zmiana tekstu krok 1 */
551287
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy funkcja zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy sprawdzamy, czy nazwa szablonu jest kluczem z tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest napis wprowadzenia tekstu według funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}}, lub czy jest to pozycja listy z: {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, wtedy funkcja zwraca tą zawartość, z jakiegoś z tych wskazanych szablonów, z drugim parametrem {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwej {{Code|szablon}}, ale tutaj jest fałszywe, wtedy wskazanie jest podobne, funkcja zwraca podobnie jak poprzednio, ale tym razem bez tabeli parametrów, w przeciwnych wypadkach ta funkcja zwraca wartość {{Code|nil}}.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, i zwracamy jego wynik.
Dla funkcji: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, tzn. nie spełnia warunku: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, wtedy przetwarzamy jego wynik, używając funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}}, i też {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a na samym końcu przetwarzamy wynik funkcją {{LinkŚródtytuł|ZamienNaKody}}, na zawartości wynikającej z elementów znacznikowych. A gdy spełnia jednak ten warunek, to uruchamiamy funkcję: {{LinkŚródtytuł|ZamienNaKody}} na wyniku z: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, jeżeli zawartość istnieje. Gdy zawartość tego znacznika nie nie istnieje lub jest pusta, to funkcja zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, jeśli istnieje, z funkcji: {{Code|{{sr|#p.CzyJestNapisWprowadzeniaTekstu|b=tak}}}} lub {{Code|{{sr|#p.CzyJestListaNapisuWprowadzeniaTekstu|b=tak}}}}, a jeżeli wszystko się zgadza, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, przeciwnie dla innych elementów zrzucany jest wynik nierozwijania.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Sprawdzamy, czy ten link symbolizuje element spisu według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami w wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
99370on3dgotyg6qkzf65gs93fitat2
551288
551287
2026-08-10T22:04:23Z
Persino
2851
/* Zmiana tekstu krok 1 */
551288
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
melumktwgbrah3lpcp3nkizp6whgowc
551289
551288
2026-08-10T22:12:35Z
Persino
2851
/* Zmiana tekstu krok 2 */
551289
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, czyli {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
bskm6agqbyuspeiyhproj03fwe1k9yr
551290
551289
2026-08-10T22:14:36Z
Persino
2851
/* Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych */
551290
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
{{Tab}}Dla otrzymanego z ostatniej funkcji zmiennej {{Code|kom}}, która odpowiada wartości fałszywej, sprawdzamy, czy takie coś jak artykuł istnieje, liczymy jego nazwę z funkcji: {{Code|{{sr|#p.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu|p=StronicowyParser/Potrzebne}}}}, i sprawdzamy, czy według uzyskanej tej nazwy, czy to jest okładka.
Jeżeli to jest artykuł niebędący stroną główną podręcznika lub artykuł podręcznikowy niebędący okładką, wtedy funkcja zrzuca wynik {{Code|1}}, przeciwnie dla istniejącej okładki, dla innego rozgałęzienia, funkcja ustawia wartość: {{Code|czy_znaleziono_okladka}} {{LinkPatrz|czy_znaleziono_okladka}} na wartość {{Code|true}}, i ta funkcja nie zrzuca żadnego wyniku.
{{Tab}}Przeciwnie, wtedy funkcja zrzuca wynik {{Code|0}}.
{{Tab}}Funkcja w innych niż opisane zawsze nie zrzuca żadnego wyniku, co odpowiada wartości zrzucanej {{Code|nil}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
63d5v7q09km5dbxhujse1tycwijinwh
551291
551290
2026-08-10T22:23:04Z
Persino
2851
/* {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} */
551291
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora przy pomocy generatora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, a później dla funkcji w niej zdefiniowanej funkcji, która dla wartości zwracanej {{Code|nil}} przerywa od razu pętlę.
Po definicji pewnych funkcji jest uruchamiana iteracja otrzymanego z tej funkcji. Pętla na pewno jest zatrzymana po wykorzystaniu wszystkich danych.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
f6997ab20tsik20xftnh5okd2tkle2q
551292
551291
2026-08-10T22:31:52Z
Persino
2851
/* {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} */
551292
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, gdy sprawdzanie przeszło, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, dalej jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
ldpbpsl72wnzwmgekljt23lhof5gji0
551293
551292
2026-08-10T22:39:31Z
Persino
2851
/* {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} */
551293
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, przeciwnie z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy: {{LinkPatrz|wystepowanie_linkow}}, istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator ze zmienną: {{LinkPatrz|wystepowanie_linkow}}, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja wchodzi do ciała właściwego funkcji, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczone {{Code|szablon_spis_tresci_zawartosc}} z zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, przeciwnie na {{Code|false}}.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a potem z tym parametrem jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, przeciwnie na {{Code|false}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
j635eacc8zzj1zrgukz0dgdzogidcbs
551294
551293
2026-08-10T23:02:10Z
Persino
2851
/* Kod dalszy funkcji */
551294
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się za nie na {{Code|.}}, dla określonej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, przeciwnie wartość {{Code|nil}}, to oznacza ze zmienna tekstowa w iteratorze nie jest podmieniana na zmienną {{Code|tekst}}, przeciwnie jest podmieniana.
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
7euswvwmcv895dzsdz89v07vu8gny7y
551295
551294
2026-08-10T23:12:49Z
Persino
2851
/* Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} */
551295
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy to jest jakiś rozdział, przeciwnie, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} i drugą zdefiniowaną funkcją i trzecią, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego i numerację z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. Przeciwnie, gdy nie ma takiego czegoś jak numeracja (nawet jego pusta) i rozdział, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając na zmienną liczbową zmienną: {{LinkPatrz|tak_ce_spis_tresci}}, a jeżeli ona nie istnieje, to przydzielamy wartości {{LinkPatrz|poziom_rozdzialu}} wartość {{Code|2}}, przeciwnie wartość {{LinkPatrz|czy_rozdzial_naglowka_hn}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość {{Code|nil}}.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, w przypadku przeciwnym zwraca ona wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
r32j2wdxj3w8gm6y7apz7yb7b13dpss
551296
551295
2026-08-10T23:26:07Z
Persino
2851
/* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */
551296
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
9mooude3au6bnlpn88aj9kd4cg4oa4y
551297
551296
2026-08-10T23:30:06Z
Persino
2851
/* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */
551297
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
hr8kpruvuw5w4mhau2b6k0bixgnitg7
551298
551297
2026-08-10T23:33:36Z
Persino
2851
551298
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedymamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
lz284w1uho8bjyel8uw3memgwqkn8e8
551330
551298
2026-08-11T00:59:34Z
Persino
2851
/* Możliwe operacje robione przez funkcję */
551330
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją,ale zdrugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwaracaną uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
1c3r0osit6vx6iu43ssm2upogrt5ui5
551331
551330
2026-08-11T01:01:38Z
Persino
2851
/* Możliwe operacje robione przez funkcję */
551331
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajduka się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elemenami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (symbolem rozdziału mogą być szablonu centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
inlt5nd8oq6rvbpdt3pfpk8sku85k3v
551332
551331
2026-08-11T01:09:31Z
Persino
2851
/* Specjalne obiekty zwracane przez iterator w pewnej zmiennej */
551332
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
ji7lch48mg6p8kh25gz9uiw1n3a96wa
551333
551332
2026-08-11T01:13:00Z
Persino
2851
/* Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział */
551333
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}}. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdziałw odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
47u60y8b25rvmxybpo1ga24317tzakn
551334
551333
2026-08-11T01:27:20Z
Persino
2851
/* Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział */
551334
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
====== Rozdziały centrowane ======
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A znacznik rozdziału centrowanego przyjmuje wartość {{Code|true}}.
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
4e1q82ugtmze3wf7rr691hnhvvf1j5i
551335
551334
2026-08-11T01:30:41Z
Persino
2851
/* Rozdziały centrowane */
551335
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
====== Rozdziały centrowane ======
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
====== Rozdziału nagłówka ======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany.
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
km7hwltg3cynfscsmx5rwfcqhghj07i
551336
551335
2026-08-11T01:35:45Z
Persino
2851
/* Rozdziału nagłówka */
551336
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
====== Rozdziały centrowane ======
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem ======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
jid09sofxt46mfz0n3b6tcqw9fl839c
551337
551336
2026-08-11T01:42:58Z
Persino
2851
/* Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem */
551337
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Możliwe operacje robione przez funkcję ====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funnkcja niluje wartości rozdziału, początku i numeracji, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
Uruchamiana jest funkcja iteratora, która się zakańcza po zakończeniu w sobie danych, lub po przerwaniu w nim przez funkcję w niej znajdującą się poprzez zwrócenie wartości {{Code|nil}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
====== Rozdziały centrowane ======
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
o70hcbmy3t2mxumfbieadg8y1jmgapu
551338
551337
2026-08-11T01:52:53Z
Persino
2851
/* Możliwe operacje robione przez funkcję */
551338
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy funkcję iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
===== Możliwe operacje robione przez funkcję =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub będące linkami inteligentnymi określone przez: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}} a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja niluje wartości rozdziału, początku i numeracji {{ZobaczTeż|nilowanie-rozdział}}, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
===== Linki wewnętrzne i zewnętrzne =====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
====== Rozdziały centrowane ======
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
qrwrte08pazs1d5uix0h5p0hmd39m22
551339
551338
2026-08-11T01:54:03Z
Persino
2851
/* Obiekty znacznikowe HTML, czyli typu ZNACZNIK */
551339
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy funkcję iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
===== Możliwe operacje robione przez funkcję =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub będące linkami inteligentnymi określone przez: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}} a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja niluje wartości rozdziału, początku i numeracji {{ZobaczTeż|nilowanie-rozdział}}, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
===== Linki wewnętrzne i zewnętrzne =====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
====== Rozdziały centrowane ======
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
h1whapj5ylvtuq5s56cnbz8k8yotikg
551340
551339
2026-08-11T01:57:24Z
Persino
2851
/* Obiekty znacznikowe HTML, czyli typu ZNACZNIK */
551340
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy funkcję iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
===== Możliwe operacje robione przez funkcję =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Specjalne obiekty zwracane przez iterator w pewnej zmiennej =====
Funkcja w swojej definicji iteratora ma w sobie zdefiniowaną inną funkcję, która ma w sobie zmienną {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}}, która przyjmuje wartość {{Code|true}}, wtedy, gdy w rozważanej linii znajdują pewne elementy, oznaczane przez {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, bądź {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub będące linkami inteligentnymi określone przez: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}} a nawet obiekty będące linkamu wewnętrznymi {{Code|LINKW}} lub zewnętrznymi {{Code|LINKZ}}, albo w kodzie znajdują się pewne elementy specjalne, jak: {{Code|PRE}}, {{Code|MATH}}, {{Code|ŹRÓDŁO}} lub {{Code|INNEPRE}}. Tą samą wartość funkcja przyjmuje, gdy w kodzie są znaczniki {{Code|ZNACZNNIK}}, którego elementy muszą być elementami znaczników centrowania, jak: {{Code|center}}, lub znaczników wprowadzenia tekstu {{Code|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja niluje wartości rozdziału, początku i numeracji {{ZobaczTeż|nilowanie-rozdział}}, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
===== Linki wewnętrzne i zewnętrzne =====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam
===== Obiekt szablon, czyli typu SZABLON =====
W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy tabelami: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tych wartości prawwdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje.
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
====== Rozdziały centrowane ======
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
kdus8fix9p8cuc0lg296jcyzacu2lnp
551341
551340
2026-08-11T02:02:49Z
Persino
2851
/* Iterator po zawartości tekstu linii prawdopodobnego rozdziału */
551341
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy funkcję iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
===== Możliwe operacje robione przez funkcję =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
Funkcja niluje wartości rozdziału, początku i numeracji {{ZobaczTeż|nilowanie-rozdział}}, gdy to nie jest element w linii, którym nie są elementami napisu wprowadzenia tekstu (szablonem rozdziału mogą być szablony centrowania lub nagłówków). W przypadku znaczników nagłówków funkcja iteratora ustawia pewną zmienną symbolizującą znacznik nagłówka {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}.
===== Obiekt szablon, czyli typu SZABLON =====
W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje.
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
===== Linki wewnętrzne i zewnętrzne =====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
====== Rozdziały centrowane ======
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
0gmzjnpc2be70isv55plfk7s7cj0xgx
551342
551341
2026-08-11T02:03:53Z
Persino
2851
/* Możliwe operacje robione przez funkcję */
551342
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy funkcję iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
===== Możliwe operacje robione przez funkcję iteratora =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Obiekt szablon, czyli typu SZABLON =====
W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje.
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
===== Linki wewnętrzne i zewnętrzne =====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
====== Rozdziały centrowane ======
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
1aedx6v6co04d0bacxdbo1ddpw1o0q3
551343
551342
2026-08-11T02:16:41Z
Persino
2851
/* Iterator po zawartości tekstu linii prawdopodobnego rozdziału */
551343
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ====
Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami.
==== Badanie jaki to jest rozdział ====
===== Rozdział zerowy =====
====== Sukces wyodrębnianiu rozdziału ======
Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu.
====== Brak numeracji rozdziału ======
{{HNumer|1=
======= Wykryta linia cudzysłowu =======
}}
Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu.
{{HNumer|1=
======= Adresu URL linii =======
}}
W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne.
===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) =====
Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację.
==== Uzyskany istniejący rozdział ====
Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii podanemu do funkcji.
===== Możliwe operacje robione przez funkcję iteratora =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Obiekt szablon, czyli typu SZABLON =====
W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje.
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
===== Linki wewnętrzne i zewnętrzne =====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
====== Rozdziały centrowane ======
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
q9o9ca9aq3j80zchatis8xjxr59ayas
551344
551343
2026-08-11T02:19:42Z
Persino
2851
/* Obiekty znacznikowe HTML, czyli typu ZNACZNIK */
551344
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ====
Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami.
==== Badanie jaki to jest rozdział ====
===== Rozdział zerowy =====
====== Sukces wyodrębnianiu rozdziału ======
Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu.
====== Brak numeracji rozdziału ======
{{HNumer|1=
======= Wykryta linia cudzysłowu =======
}}
Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu.
{{HNumer|1=
======= Adresu URL linii =======
}}
W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne.
===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) =====
Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację.
==== Uzyskany istniejący rozdział ====
Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii podanemu do funkcji.
===== Możliwe operacje robione przez funkcję iteratora =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Obiekt szablon, czyli typu SZABLON =====
W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje.
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
===== Linki wewnętrzne i zewnętrzne =====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak innicjowane jak tam
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
====== Rozdziały centrowane ======
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
saywzpjvn9b3r90vp2kjax4xim15lqi
551345
551344
2026-08-11T02:21:58Z
Persino
2851
/* Linki wewnętrzne i zewnętrzne */
551345
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ====
Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami.
==== Badanie jaki to jest rozdział ====
===== Rozdział zerowy =====
====== Sukces wyodrębnianiu rozdziału ======
Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu.
====== Brak numeracji rozdziału ======
{{HNumer|1=
======= Wykryta linia cudzysłowu =======
}}
Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu.
{{HNumer|1=
======= Adresu URL linii =======
}}
W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne.
===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) =====
Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację.
==== Uzyskany istniejący rozdział ====
Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii podanemu do funkcji.
===== Możliwe operacje robione przez funkcję iteratora =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Obiekt szablon, czyli typu SZABLON =====
W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje.
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
===== Linki wewnętrzne i zewnętrzne =====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznaniamamy coś w rozdziaju:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
====== Rozdziały centrowane ======
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
bzy216j2pzd5fuulx5gh0qhawo2tnad
551346
551345
2026-08-11T02:26:09Z
Persino
2851
/* Wartości zwracane przez funkcję w przypadku wykrycia rozdziału */
551346
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ====
Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami.
==== Badanie jaki to jest rozdział ====
===== Rozdział zerowy =====
====== Sukces wyodrębnianiu rozdziału ======
Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu.
====== Brak numeracji rozdziału ======
{{HNumer|1=
======= Wykryta linia cudzysłowu =======
}}
Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu.
{{HNumer|1=
======= Adresu URL linii =======
}}
W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne.
===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) =====
Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację.
==== Uzyskany istniejący rozdział ====
Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii podanemu do funkcji.
===== Możliwe operacje robione przez funkcję iteratora =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Obiekt szablon, czyli typu SZABLON =====
W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje.
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
===== Linki wewnętrzne i zewnętrzne =====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam.
===== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału =====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznania, mamy coś w rozdziaju {{Patrz|procedura zwracania ogólnie wartości}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
====== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział ======
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
====== Rozdziały centrowane ======
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
====== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}======
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
====== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})======
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
surk5hr2ql98ldlc6d8dhjmgtenf28u
551347
551346
2026-08-11T02:31:08Z
Persino
2851
/* {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} */
551347
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ====
Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami.
==== Badanie jaki to jest rozdział ====
===== Rozdział zerowy =====
====== Sukces wyodrębnianiu rozdziału ======
Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu.
====== Brak numeracji rozdziału ======
{{HNumer|1=
======= Wykryta linia cudzysłowu =======
}}
Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu.
{{HNumer|1=
======= Adresu URL linii =======
}}
W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne.
===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) =====
Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację.
==== Uzyskany istniejący rozdział ====
Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii podanemu do funkcji.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
===== Możliwe operacje robione przez funkcję iteratora =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Obiekt szablon, czyli typu SZABLON =====
W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje.
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
==== Linki wewnętrzne i zewnętrzne ====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam.
==== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznania, mamy coś w rozdziaju {{Patrz|procedura zwracania ogólnie wartości}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
===== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział =====
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
===== Rozdziały centrowane =====
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
===== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}=====
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
===== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})=====
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
b96fsv2wj4oqe6c9etlu7269pmt7ryk
551348
551347
2026-08-11T02:32:06Z
Persino
2851
/* Linki wewnętrzne i zewnętrzne */
551348
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ====
Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami.
==== Badanie jaki to jest rozdział ====
===== Rozdział zerowy =====
====== Sukces wyodrębnianiu rozdziału ======
Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu.
====== Brak numeracji rozdziału ======
{{HNumer|1=
======= Wykryta linia cudzysłowu =======
}}
Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu.
{{HNumer|1=
======= Adresu URL linii =======
}}
W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne.
===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) =====
Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację.
==== Uzyskany istniejący rozdział ====
Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii podanemu do funkcji.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
===== Możliwe operacje robione przez funkcję iteratora =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Obiekt szablon, czyli typu SZABLON =====
W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje.
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
===== Linki wewnętrzne i zewnętrzne =====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam.
==== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznania, mamy coś w rozdziaju {{Patrz|procedura zwracania ogólnie wartości}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
===== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział =====
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
===== Rozdziały centrowane =====
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
===== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}=====
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
===== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})=====
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
las2ce43y1rk9v8ny46tpf4zzkwxcn9
551349
551348
2026-08-11T02:35:46Z
Persino
2851
/* Uzyskany istniejący rozdział */
551349
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ====
Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami.
==== Badanie jaki to jest rozdział ====
===== Rozdział zerowy =====
====== Sukces wyodrębnianiu rozdziału ======
Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu.
====== Brak numeracji rozdziału ======
{{HNumer|1=
======= Wykryta linia cudzysłowu =======
}}
Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu.
{{HNumer|1=
======= Adresu URL linii =======
}}
W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne.
===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) =====
Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdzia; i numerację.
==== Uzyskany istniejący rozdział ====
Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii {{Code|linia}} podanemu do funkcji.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
===== Możliwe operacje robione przez funkcję iteratora =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Obiekt szablon, czyli typu SZABLON =====
W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje.
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
===== Linki wewnętrzne i zewnętrzne =====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam.
==== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznania, mamy coś w rozdziaju {{Patrz|procedura zwracania ogólnie wartości}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
===== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział =====
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
===== Rozdziały centrowane =====
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
===== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}=====
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
===== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})=====
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
lean5h74nr9xa2sxjtyaqtazk91l0or
551350
551349
2026-08-11T02:37:17Z
Persino
2851
/* Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) */
551350
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ====
Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami.
==== Badanie jaki to jest rozdział ====
===== Rozdział zerowy =====
====== Sukces wyodrębnianiu rozdziału ======
Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu.
====== Brak numeracji rozdziału ======
{{HNumer|1=
======= Wykryta linia cudzysłowu =======
}}
Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu.
{{HNumer|1=
======= Adresu URL linii =======
}}
W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne.
===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) =====
Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdział i numerację.
==== Uzyskany istniejący rozdział ====
Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii {{Code|linia}} podanemu do funkcji.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
===== Możliwe operacje robione przez funkcję iteratora =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Obiekt szablon, czyli typu SZABLON =====
W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje.
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
===== Linki wewnętrzne i zewnętrzne =====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam.
==== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznania, mamy coś w rozdziaju {{Patrz|procedura zwracania ogólnie wartości}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
===== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział =====
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
===== Rozdziały centrowane =====
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
===== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}=====
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
===== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})=====
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział przed cudzysłowek ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja,jeśli któreś z nich jest puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
nyfb2ek4q5tiw3tjf7jcevhmgqpxahj
551354
551350
2026-08-11T11:44:51Z
Persino
2851
/* Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}}) */
551354
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Code|p.UruchamianieAnalizatoraSpisuRzeczyStrony}} ==
Funkcja zwraca wynik, czy uruchomić wydzielonie generowania spisu treści z całego jego pierwotnego. Szablon zwraca zawsze wartość {{Code|true}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()...end;
</syntaxhighlight>
Funkcja nie przyjmuje żadnego parametru.
Przykłady użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local czy_tak=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony();
</syntaxhighlight>
Funkcja zwraca, jak zawsze wynik, wspomniany w nagłówku.
== {{Code|p.ParserPodawaniaNapisuWprowadzeniaTekstu}} ==
Funkcja sprawdza, czy podany napis, nie dodatni, opisanym nie znakami {{Code|{{=}}}}. Ona bada linie list tzn. zaczynające się od linii znakami: {{Code|<nowiki>[;%*:#]</nowiki>}} (to są rozdziały ujemne), także rozważa też rozdziały zerowe (to nie są nagłówki typu {{Code|<nowiki>== Nagłówek==</nowiki>}}, ani ujemne). Funkcja zalicza do rozdziałów znaczniki utworzone ze znaczników od: {{Code|<nowiki><h1></nowiki>}}, do: {{Code|<nowiki><h6></nowiki>}}, też rozważa parametr w nim: {{Code|<nowiki>mw-hnumber-<liczba></nowiki>}}, wtedy poziom nie musi być od {{Code|1-6}}, ale też i: {{Code|> 6}}. Funkcja sprawdza, czy zaliczyć rozdziały centrowane (znacznikowe: znacznik {{Tag|center}}, i centrowane: {{s|ce}}, {{s|centruj}} i {{s|center}}) do rozdziałów, ona też potrafi odliczyć je od wykrywanych rozdziałów. Nie wyszystkie rozdziały ujemne (rozdziały listy) przez ten twór są przez niego uważane jako rozdziały, które trzeba zaliczyć, podobnie zerowe i centrowane.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
...
return function(linia,tak_ce_spis_tresci)
... ---- ciało funkcji zwracanej. Tutaj są sprawdzane, czy podane linie zaliczyć do rozdziałów. Zmienna: tak_ce_spis_tresci, to jest zmienna mówiąca, czy uwzględniać rozdziały centrowane.
return linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;---- Zwracane parametry tej funkcji;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}},
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}}
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}}.
Parametry funkcji zwracanej:
* {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/Rozdziały}} - linia zakodowana do rozważenia bez rozdziałów dodatnich, aby sprawdzić, czy to jest rozdział,
* {{Code|tak_ce_spis_tresci}} {{Patrz|tak_ce_spis_tresci}} - czy ma uwzględniać rozdziały centrowane znacznikowe, czy szablonowe, podane pozyżej.
Parametry zwracane przez funkcję, zwracaną przez tą funkcję, opisuje daną linie, czy ją uważać za rozdział, któremu w innej funkcji niż ta można przyporządkować jej zawartość:
* {{Code|linia_temp}} {{Patrz|linia_temp}} - rozważana linia,
* {{Code|nazwa_rozdzialu}} {{Patrz|nazwa_rozdzialu}} - nazwa rozdziału w opisanym linii rozdział, zwykle jest to ciało danego nagłówka, częśc tekstu po znakach listy następujące po sobie od początku linii,
* {{Code|poziom_rozdziału}} {{Patrz|poziom_rozdziału}} - poziom danego rozdziału podanego, jest ściśle zależna od tego, czy to jest rozdział centrowany, wtedy rozdział: {{Code|2}}, nagłówek, to liczba przy: {{Code|h}}, dla znaczników nagłówka, lub przy: {{Code|mw-hnumber-<number>}} {{Patrz|mw-hnumber-<number>}} dla: {{Code|<nowiki><h6></nowiki>}},
* {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek rozdziału, początek rozdziału to jest przedrostek listy, czyli znaki: {{Code|<nowiki>[;%*:#]</nowiki>}},
* {{Code|numeracja_rozdzialu}} {{Patrz|numeracja_rozdzialu}} - numeracja rozdziału, to są numerki oddzielone od siebie kropką, na końcu tegomoże być ona, ale nie musi,
* {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy rozdział napisany jako szablonowo lub znacznikowo, jeśli jest centrowany, to: {{Code|true}}, w przeciwny wypadku: {{Code|nil}}.
Przykłady użycia:
<syntaxhighlight lang="lua">
local szablonowe_modul=require("Module:Szablonowe");
local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
local tablica_analizy_obiektow_strony_dany_modul={};
local linia="<h6>Nagłówek</h6>";
linia=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(linia,nil,tablica_analizy_obiektow_strony_dany_modul);
local tab_nazwa_spisow_przekierowaniowych={};
local nazwa_przestrzeni="";
local nazwa_przestrzeni_ksiazki="";
local nazwa_ksiazki="Książki";
local nazwa_spisu_tresci="";
local pelna_nazwa_spisu_tresci_szablonowa="";
local parser=stronicowyparser_rozdzialy_modul.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)
end;
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Funkcja zwraca wyniki:
<syntaxhighlight lang="lua">
local linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany="'\"`UNIQ--ZNACZNIK-1-QINU`\"'","Nagłówek",6,nil,"",nil;
</syntaxhighlight>
=== Wartości początkowe przyjmowane przez funkcję ===
Wartością początkową przyjmowaną jedyną jest zmienna {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}:
<syntaxhighlight lang="lua">
local maksymalny_rozmiar_rozdzialu_zerowego=70;
</syntaxhighlight>
Ona mówi, jaką szerokość może mieć maksymalną rozdział zerowy, czy nawet ujemny, aby został uznany za prawdziwy rozdział.
Reszta zmiennych przyjmuje wartości poczatkowe, jako nilowe, jak to jest przy deklaracji zmiennych w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.
=== Tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Przedstawione tutaj tablice są zdefiniowane w module: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a opisane w: {{Code|{{sr|StronicowyParser/obiekty}}}}.
==== {{Śródtytuł|Szablony centrowania}}Szablony centrowania ====
Funkcja wykorzystuje tabelę: {{Code|{{sr|#p.szablony_wprowadzenia_napisu_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, o:
<syntaxhighlight lang="lua">
p.szablony_wprowadzenia_napisu_spisu_rzeczy={
["Ce"]=1,
["Centruj"]=1,
["Center"]=1,
};
</syntaxhighlight>
Z którego się dowiadujemy, z jakimi szablonami centrowania mamy do czynienia w tej funkcji, funkcja je wykrywa i ustawia, że dla tej linii z nim ją wykrył, niezależnie, jakie linki wewnątrz posiada.
==== Szablony linków wewnętrznych artykularne tworzące spis rzeczy szablonowe ====
Jeżeli w linii wykryto te szablony zamiast szablonów centrowania, to wiadomo, że ona nie stanowi rozdziału w liniach, które mają być rozdziałami ujemnymi lub zerowymi. Do tego celu służą linki zdfiniowane w tablicach, które są napisane w podrozdziałach poniżej.
===== Pierwszego typu - linki inteligentne =====
Następną tablicą: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
===== Drugiego typu - szablony tworzenia spisu rzeczy =====
Tą tablicą jest: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} jest z punktu: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}.
==== Znaczniki wprowadzenia tekstu ====
Ta tablica: {{Code|{{sr|#p.znaczniki_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, zawiera definicję znaczników różnych nagłówków, zdefiniowaną tam.
Są to znaczniki {{Strong|HTML}} o możliwych pozimach od: {{Code|1}} do {{Code|6}}, jakie ta funkcja ma wykrywać, żeby uznać tą linię za rozdział, niezależnie, jakie linki wewnątrz znacznika są zdefiniowane.
Poziomy większe od {{Code|6}} są jedynie możliwe za pomocą szablonu {{s|HNumer}}.
==== Rozdziały dodatnie centrowane znacznikowe i szablonowe, które uznać za nie rozdziały ====
Linie, które zostały uznane za rozdziały, można uznać, że takie nie są, jeżeli zawierają one szablony zdefiniowane w tablicy: {{Code|{{sr|#p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}:
<syntaxhighlight lang="lua">
p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego={
["Rozdział"]=true,
["Podrozdział"]=true,
["MapaObrazu"]=true,
};
</syntaxhighlight>
Rozdziały te, które zostały uznane za nierozdziały, powoduje to, że iterator tej funkcji wtedy dla ściśle określonej linii zwróci wartość {{Code|nil}}, a nie konkretne wartości, które by świadczyły o rozdziale centrowanym. Szablony centrowania szablonowego są zdefiniowane w: {{LinkŚródtytuł|Szablony centrowania}}, a znaczniki to są po prostu w postaci definicji: {{Tag|center}}.
==== Funkcje lokalne ====
===== {{Śródtytuł|LiniaCydzyslow}}{{Code|LiniaCydzyslow}} =====
Fukcja wyszukuje, czy rozdział jest pomiędzy cudzysłowami, a jeżeli nie, to zwraca {{Code|false}}, w przeciwnym wypadku sprawdzamy dalej, jeżeli rozdział pasuje do tego, że on składa się z samych liter dużych z możliwymi odstępami, oraz w rozdziale można wyróżnić pojedyńcze litery duże, lub ta duża pojedyncza znajduje sie na początku rozdziału, bądź na jej końcu, wtedy funkcja zwraca wartość odpowiadającej wartości fałszu, a jęzeli nie, to prawdy.
===== {{Śródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}{{Code|WykluczenieNieodpowiednichNormSzablonowych}} =====
Funkcja zwraca {{Code|true}}, gdy dało się wykluczyć nieodpowiednie norm szablonowe, w przeciwnym wypadku {{Code|nil}}, to ostatnie właśnie to jest zwracane, gdy obiekt szablonowy jest z kodem o obiektami: {{Code|GALERIA}}, {{Code|ŹRÓDŁO}}, {{Code|PRE}}, {{Code|INNEPRE}}, {{Code|WIKITABELA}} lub {{Code|MAPAOBRAZU}}, albo on jest szablonem normalnym o obiekcie: {{Code|SZABLON}}, którego nazwy pasują do nazw kluczy tabeli: {{LinkPatrz|p.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego}}.
===== {{Śródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}{{Code|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}} =====
Funkcja słuzy do rewidowania zawartości szablonu, ukrytą pod pewnym parametrem, czy znacznika, oczywiście centrowania, czy ona jest: {{Code|<nowiki>^%s*%d+%s*/%s*%d+%</nowiki>}} (czyli rozdziały składające się z dwóch liczb oddzielonych prawym ukośnikiem), a jeśli nie, to czy: {{Code|<nowiki>!%s*'*%s*$</nowiki>}} (na końcu przed ewentualnie cudzysłowem znajduje się wykrzyknik), w takich przypadkach zawsze zwracanajest wartość {{Code|nil}}, jeżeli się funkcja zakańcza, jeżeli sprawdzenie przeszło pomyślnie.
Jeśli ona się nie zakończyła przedwcześnie, wtedy liczy zmienne, tutaj nielokalne, rozdział {{Code|rozdzial}} i numerację {{Code|numeracja}} z: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}} {{Patrz|p.NumeracjaOrazTekstWprowadzeniaTekstu}} ze zmiennej testowej, ktorą jest pojedyncza linia bez znaków listy, a jeżeli tak z policzonego ze zmiennej rozdziału funkcja: {{LinkŚródtytuł|WykluczenieNieodpowiednichNormSzablonowych}}, nie wyklucza niczgo, tzn. zaprzeczenie zwrócone przez tą funkcję przyjmuje wartość prawdziwą - czyli w tekście sprawdzamy występują te specjalne znaki, wtedy zmienne: {{Code|numeracja}} i {{Code|rozdział}, są przyrównywane do wartości {{Code|nil}}, przeciwnym wypadku funkcja nic nie robi.
===== {{Śródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}{{Code|NiestardardoweSzablonoweWprowdzeniaTekstu}} =====
Funkcja sprawdza zawartość szablonu jakiegoś centrowania. Funkcja rewiduje, czy nazwa tego szablonu, czy jest rzeczywiście szablonem centrowania według tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, a jeżeli tak, z tej tabeli jest liczony klucz zmiennej jego zawartości tabeli parametrów szablonow, pod którym jest ukryta jego zawartość liczona z tabeli parametrów szablonu, co ta zawartartość jest sprawdzana później przez funkcję: {{LinkŚródtytuł|FunkcjaRewidowaniaNiestandardowegoNapisuWprowadzeniaTekstu}}, która możliwie niluje odpowiednio dwie zmienne, jeżeli zajdzie taka potrzeba.
===== {{Śródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}{{Code|NiestardardoweZnacznikoweWprowdzeniaTekstu}} =====
To samo, co dla funkcji: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, tylko że, tym razem nie dla szablonów centrowania, tylko dla znaczników centrowania {{Tag|center}}, ale też dla znaczników wprowadzenia tekstu opisywanych przez tabelę: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Początek (znaki specjalne początku pozycji listy) i rozdział z możliwą numeracją ====
Funkcja wyodrębnia początek i rozdział z możliwą numeracją od siebie na linii z pozycją listy. Jeżeli tego się nie dało wyodrębnić, to mamy wtedy prawdopodobnie rozdział zerowy, ale nie musi być, może być to zwykła linia tekstowa pewnego napisu wprowadzenia tekstu. W takim przypadku funkcja liczy rozdział z numeracją lub wyodrębnia to z tego otoczonego cudzysłowami.
==== Badanie jaki to jest rozdział ====
===== Rozdział zerowy =====
====== Sukces wyodrębnianiu rozdziału ======
Jeżeli to dało się wyodrębnić {{ZobaczTeż|rozdział}}, to przyjmujemy, że zmienna {{Code|poczatek}} jest równa ciągowi znakowemu pustemu, a z rozdziału numeracji usuwamy znaki specjalne dzięki {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, dalej są usuwane odstępy z początku i końca tego czegoś i na podstawie tego jest wyznaczany rozdział i numeracja z tak uzyskanemu szeregu.
====== Brak numeracji rozdziału ======
{{HNumer|1=
======= Wykryta linia cudzysłowu =======
}}
Jest sprawdzane, czy to jest linia z cudzysłowem na podstawie {{LinkŚródtytuł|LiniaCydzyslow}}, a jeżeli funkcja zrzuci wartość odpowiadającą prawdziwej wartości, wtedy rozdział jest równy linii, a poczatek i numeracja są równe ciągowi pustemu.
{{HNumer|1=
======= Adresu URL linii =======
}}
W innym wypadku, gdy poprzedni warunek nie jest spełniony, sprawdzamy, czy któreś z poszczególnych ciągów z czarnymi znakami są adresami z {{Strong|URL}}, a jeżeli tak, to wtedy są tak samo inicjowane zmienne.
===== Rozdział będący rozdziałem pozycji listy (rozdział niezerowy) =====
Gdy nie jest spełniony warunek {{LinkZobaczTeż|rozdział}}, to wtedy to samo robimy, co tam, tylko bez znaków początku pozycji listy, który usunęliśmy z linii, rozdzielając na dwa łańcuchy znaków, tzn. rozdział i numerację.
==== Uzyskany istniejący rozdział ====
Jeżeli uzyskamy rozdział istnieje, to zmienna {{Code|ze_specialnymi_obiektami}} {{Patrz|ze_specialnymi_obiektami}} przyjmuje wartość {{Code|true}}, a zmienna {{Code|tekst}} jest równa uzyskanemu rozdziałowi bez numeracji, w przeciwnym wypadku jest równy linii {{Code|linia}} podanemu do funkcji.
==== Iterator po zawartości tekstu linii prawdopodobnego rozdziału ====
Uruchamiamy iterator: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, któr zwraca fukcję iteratora po zmiennej {{Code|tekst}} z pierwszą funkcją, która powoduje, że ona jak zwróci wartość {{Code|nil}}, to natychmiast się zakańcza, lub to robi po zakończeniu zasobów danych.
===== Możliwe operacje robione przez funkcję iteratora =====
Funkcja dopuszcza rozdziały z pozycją listy, poczatek linii ma znaki listy tzn. {{Code|<nowiki>[%*#;:]</nowiki>}}, wtedy mamy doczynienia z mozliwy rozdziałem ujemnym, ale to nie musi byc rzeczywiście rozdziałem, linia nie musi być częścią listy, wtedy mamy rozdział z możliwą numeracją, ale z drugiej strony w tych dwóch poprzednich wypadkach, nawet numeracji nie musi być, aby był przez tą funkcją zwracaną, uznanym, że to może być rozdział, albo normalną linią.
===== Obiekt szablon, czyli typu SZABLON =====
W tej funkcji sprawdzamy też obiekt: {{Code|SZABLON}}, przy pomocy funkcji: {{Code|{{sr|#p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON|p=Szablonowe}}}}, dla szablonów centrowania tabelą {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, wtedy ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{Code|czy_centrowanie}} {{Patrz|czy_centrowanie}}, na wartości {{Code|true}}. Potem uruchamiamy funkcję dla niej: {{LinkŚródtytuł|NiestardardoweSzablonoweWprowdzeniaTekstu}}, co potem ta funkcja zwraca wartość {{Code|true}}. A dla szablonów będących linkami sprawdzamy za pomocą kluczy w tabelach: {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}} i {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/Rozdziały/Tom III}}, lub funkcją {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=SronicowyParser/Potrzebne}}}}, a jeżeli któreś z nich zwróci wartość {{Code|true}}, wtedy przy istnieniu zmiennej: {{Code|rozdział}}, zmienne: {{Code|poczatek}}, {{Code|rozdzial}} i {{Code|numeracja}}, przyjmują {{ZobaczTeż|nilowanie-rozdział}} wartość {{Code|nil}}, wtedy ta funkcja w iteratorze zwraca wartość {{Code|true}}. A wiec wtedy na podstawie tej wartości prawdziwej, funkcja iteratorze zwraca wartość domyślnie nilową, a więc wtedy przy uruchomieniu tego iteratora pętla się zatrzymuje.
===== Obiekty znacznikowe '''HTML''', czyli typu ZNACZNIK =====
Gdy obiekt jest równy: {{Code|ZNACZNIK}}, wtedy używamy funkcji: {{Code|{{sr|#p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika|p=StronicowyParser/Potrzebne}}}}, do zwracania nazwy, zawartości i atrybutów. Dla zawartości nienilowej, sprawdzane, czy znacznikiem jest: {{Tag|center}}, czy jednych ze znaczników wynikających z tabeli: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W tym pierwwszym ustawiamy zmienne: {{LinkPatrz|ze_specialnymi_obiektami}} i {{LinkPatrz|czy_centrowanie}}}, na wartość {{Code|true}}, i zwracamy do funkcji w iteratorze wartość {{Code|nil}}, a w tym drugim wypadku zmienna: {{LinkPatrz|ze_specialnymi_obiektami}}, przyjmuje wartość {{Code|true}}, a: {{Code|czy_znaczniki_hn}} {{Patrz|czy_znaczniki_hn}}, przyjmuje też to samo, i to samo jest zwracane, co w pierwszym. A w obu tych przypadkach uruchamiana jest funkcja: {{LinkŚródtytuł|NiestardardoweZnacznikoweWprowdzeniaTekstu}}.
===== Linki wewnętrzne i zewnętrzne =====
Gdy mamy obiekt: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy zmiennej {{LinkPatrz|ze_specialnymi_obiektami}} przydzielana jest wartość {{Code|true}}, i przy istnieniu zmiennej {{Code|rozdział}}, inne zmienne takie jak w: {{LinkZobaczTeż|nilowanie-rozdział}}, są tak inicjowane jak tam.
==== Wartości zwracane przez funkcję w przypadku wykrycia rozdziału ====
Funkcja, gdy nie wykryła rozdziału, to zwraca wartość {{Code|nil}}, w przypadku jego rozpoznania, mamy coś w rozdziaju {{Patrz|procedura zwracania ogólnie wartości}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja,czy_centrowany_rozdzial;
</syntaxhighlight>
Parametry zwracane przez funkcję zwracaną:
* {{Code|linia}} - rozwarzana linia zwracana przez funkcję,
* {{Code|rozdzial}} - wyodrębiony rozdział, bez początku listy i numeracji,
* {{Code|poczatek}} - znaki początka listy, lub {{Code|nil}},
* {{Code|numeracja}} - numeracja rozdziału, znajdująca się na samym jej poczatku, w przypadku pozycji listy, tuz za tymi znakami,
* {{Code|czy_centrowany_rozdzial}} - zwracane wartości {{Code|true/nil}}, wartość prawdziwą, gdy wykryto rozdział centrowany szablonowo, czy znaczniowo, przeciwnym wypadku jest zwracana wartość {{Code|nil}}.
===== Brak obiektów specjalnych linii, które sugerują, że to nie jest jednak rozdział =====
Jeżeli ustawiony nie został parametr przez wcześniejsze wykonywanie iteracji parametr {{Code|ze_specialnymi_obiektami}} na wartość {{Code|true}}, gdy przed iteracją parametr {{Code|rozdział}} istniał, jeśli nie, wtedy wchodzimy do pierwszego rozkłazienia funkcji iteratora dla danej rozważanej linii.
Funkcja sprawdza, czy to jest rozdział zerowy przy użyciu funkcji {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|b=tak}}}} w ten sposób otrzymamy zmienną rozdziału, jak to na pewno jest rozdziałem możliwym zerowym bez dalszych sprawdzeń. Funkcja następnie też rewiduje, czy ona posiada nieprzekroczoną liczbę z maksimum znaków, określonej przez zmienną {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}.
Funkcja, jeżeli weszła w ten krok instrukcji warunkowej, w takich przypadkach może zwrócić informację w zależności od jej definicji, że to jest jednak taki rozdział w odpowiedni sposób, w przeciwnym wypadku zwraca informację w postaci wartości nilowej, że jednak nim nie jest, czyli jest to zwykła linia tekstowa, a nie rozdział zerowy, jak przypuszczaliśmy.
W przypadku pozytywnego rozeznania jest sprawdzene, czy rozdział przed cudzysłowem końcy się na znaki iterpunkcyjne, w języku polskim, a jeżeli nie, to funkcja zwraca wartość {{Patrz|bez obiektów zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,0,nil,numeracja;
</syntaxhighlight>
Sprawdzane jest, czy wartości zmiennych {{Code|poczatek}} i {{Code|numeracja}}, czy są nepuste. A gdy nie ma początku, lub jest, ale jest on pusty, oraz jednocześnie, nie ma numeracji, lub numeracja jest zero, wtedy funkcja iteratora zwraca {{Code|nil}}. Przeciwnie, jeśli przed cudzysłowem nie ma znakow iterpunkcyjnych, funkcja zwraca podobny wynik do: {{LinkPatrz|bez obiektów zwracane}}.
W pozostałych wypadkach funkcja zwraca wartość {{Code|nil}}.
===== Rozdziały centrowane =====
Gdy zmienna {{LinkPatrz|czy_centrowanie}}, uzyskaną z iteracji, a także {{LinkPatrz|tak_ce_spis_tresci}}, wstawianej jako drugi parametr iteratora, czy uwzględniać rozdziały centrowane, jeśli przyjmuje wartość nieprawdziwą, to wtedy funkcja iteratora zwraca zawsze {{Code|nil}}, w tym przypadku, przeciwnie, a jeżeli rozdział i numeracja jednocześnie nie istnieją, to funkcja ogólnie zwraca {{Code|nil}}.
Przy istnieniu rozdziału centrowanego w linii, funkcja zwróci taki rozdział, jeżeli zmienna rozdziału i numeracji istnieją, ale któreś z nich nie może może być puste. Poziom rozdziału jest wtedy {{Code|2}}. A zmienna, czy to jest rozdział centrowany, przyjmuje wartość {{Code|true}}.
Wartości zwracane przez funkcję w przypadku rozdziałów centrowanych {{Patrz|centrowane_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,2,nil,numeracja,true;
</syntaxhighlight>
===== Rozdział nagłówka ze znacznikami {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}=====
Jest podobny przypadek rozpatrywania, jak przy rozdziałach centrowania, poziom rozdziału jest okreslany przez funkcję: {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, a to nie jest rozdział centrowany. W tym przypadku zmienna {{LinkPatrz|czy_znaczniki_hn}} przyjmuje wartość odpowiadającej prawdziwej.
Wynik w tym wypadku est zwracany {{Patrz|znaczniki_hn_zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,numer_rozdzialu,nil,numeracja;
</syntaxhighlight>
===== Pozostałe rozdziały (ujemne), które zostały podseperowane, że jednak mogą być rozdziałami, a nie zwykłym tekstem - rozdziały niedwukropkowe (listy niezaczynające się od: {{Code|:}})=====
Wtedy funkcja sprawdza również, czy taki rozdział nie ma przekroczonego maksimum znaków, tzn. {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}. Ta część dokonuje też dalszych sprawdzeń, co na podstawie tego taki rozdział zaliczać do rozdziału ujemnego (wtedy jest zwracany szereg wartości), czy do zwykłego tekstu (wtedy jest zwracana tylko wartość {{Code|nil}}).
Sprawdzane jest {{ZobaczTeż|rozdział niedwukropkowy zwracane}}, czy jest to rozdział dwukropkowy, przy pomocy funkcji: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|b=tak}}}}, jeżeli nie jest, to jest dalej sprawdzane, czy rozdział ma początek równy znakom listy, lub przed cudzysłowem (w ramach cudzysłowu) ma znaki interpunkcyjne, a jeżeli nie ma, to zwracany jest wynik ogólny {{Patrz|rozdział niedwukropkowy zwracane}}:
<syntaxhighlight lang="lua">
return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
</syntaxhighlight>
{{tab}}W innym wypadku, jeżeli poczatek linii, lub nawet numeracja, jeśli któreś z nich nie istnieją lub są puste, wtedy funkcja zwraca {{Code|nil}}, przeciwnie jest sprawdzane, co w punkcje {{LinkZobaczTeż|rozdział niedwukropkowy zwracane}} i zwracany jest wynik jak: {{LinkPatrz|rozdział niedwukropkowy zwracane}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
hbw7a77g17z47p7bdurz9w5c3tnujc8
Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom V
4
63907
551299
2026-08-10T23:33:29Z
Persino
2851
Utworzono nową stronę „<noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} == Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i…”
551299
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
2e3vxazxv3hmvz9nz6szy3myyz8h9rp
551300
551299
2026-08-10T23:35:03Z
Persino
2851
/* Szablony i znaczniki, wyróżniające linie, które są rozdziałami */
551300
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
63oxm4r32pyz1y38uhkfov55nd44qa0
551301
551300
2026-08-10T23:36:30Z
Persino
2851
/* {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} */
551301
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
g6l1yqwmpsjmpavdlt4t3o1ynjmvta8
551302
551301
2026-08-10T23:37:19Z
Persino
2851
/* {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} */
551302
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
jzoetkhxu24qqse9y1xz5odsdaylz11
551303
551302
2026-08-10T23:38:19Z
Persino
2851
/* {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} */
551303
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
4vwoxb6rq8j32wnkctspm7tqageopxi
551304
551303
2026-08-10T23:40:09Z
Persino
2851
/* Zmiana tekstu krok 1 */
551304
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
77uva0lm8ueb7ro4mqi5a7jbaysrmth
551305
551304
2026-08-10T23:40:51Z
Persino
2851
/* Zmiana tekstu krok 3 */
551305
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
q88qdmpn0ru4ckllf34btwmwi6k0i4x
551306
551305
2026-08-10T23:41:37Z
Persino
2851
/* {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} */
551306
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
nnj0wht7m0ywtjkzb5xbybc3gkp3dor
551307
551306
2026-08-10T23:42:20Z
Persino
2851
/* {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} */
551307
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
9dj5gvx8jovkzh78l9lirksl7lq5yth
551308
551307
2026-08-10T23:43:37Z
Persino
2851
/* {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} */
551308
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
nnj0wht7m0ywtjkzb5xbybc3gkp3dor
551309
551308
2026-08-10T23:44:39Z
Persino
2851
/* {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} */
551309
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
g2ahykliuw7r4igewe2an6z790qw5iy
551310
551309
2026-08-10T23:45:26Z
Persino
2851
/* Kod dalszy funkcji */
551310
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
crd3o8si3a7a00e2rxepu619fd65d4h
551311
551310
2026-08-10T23:46:42Z
Persino
2851
/* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */
551311
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
c6cts1djuwrhofv5zet3ng7796sabqa
551312
551311
2026-08-10T23:47:34Z
Persino
2851
/* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */
551312
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
041z52xrwdt3y7m8lhemz1rqbrss6fs
551313
551312
2026-08-10T23:49:10Z
Persino
2851
/* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */
551313
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
snkioyb6baw4gwtzdo7uvrkpujiyur2
551314
551313
2026-08-10T23:49:43Z
Persino
2851
/* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */
551314
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
oeh94irrfwqqn2p91esmh21ay0lo8mg
551315
551314
2026-08-10T23:50:45Z
Persino
2851
/* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */
551315
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
sb32g3wgnbtp5hz1fwlp20b12y75ptt
551316
551315
2026-08-10T23:51:55Z
Persino
2851
/* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */
551316
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
2i11ostgbklhnqfbq88sep3njvdal2k
551317
551316
2026-08-10T23:52:51Z
Persino
2851
/* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */
551317
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
rv5jbnvw3zvl1i86hkv2937pkpq0kx9
551318
551317
2026-08-10T23:53:41Z
Persino
2851
/* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */
551318
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
m8k4blvn87sry13kgeheff773eid7cu
551319
551318
2026-08-10T23:54:57Z
Persino
2851
/* Wartości zwracane przez iterator */
551319
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
plnrj70io1d6ym74q4jueh0j9mzlwyl
551320
551319
2026-08-10T23:55:51Z
Persino
2851
/* Wartości zwracane przez iterator */
551320
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
9mf8jlxes7bbhc9wnfo3jo5rlxcpbkv
551322
551320
2026-08-11T00:06:14Z
Persino
2851
/* {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} */
551322
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy są obiektami linków okładek.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
ftkw8990s2bncuafoabp02ggkey6964
551323
551322
2026-08-11T00:09:59Z
Persino
2851
/* {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} */
551323
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza funkcją: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w rrtym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
3p67zpqeuhtcxrg3xl9u6u3wb37q8yo
551324
551323
2026-08-11T00:20:56Z
Persino
2851
/* {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} */
551324
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Funcja służy do rozważania nagłówków centrowanych szablonowo, czy znacznikowo, a nawet gdy zamiast tego mamy znacznik nagłówka.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. Dalej są sprawdzane, czy wprowadzony tekstjako pierwszy argument, czy jest nagłówkiem spisu treści rozdziału centrowanego, czy nagłówkowego.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza według elementu: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w tym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
5o8x9spejmvpkw6ufhbllji5n7t2vvz
551325
551324
2026-08-11T00:23:38Z
Persino
2851
/* {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} */
551325
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna. Funkcja słuzy przede wszystkim do analizy szablonów znaczników, czy normalnych ich, innych niż centrowania i nagłówków, ale nadal znaczników.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Funcja służy do rozważania nagłówków centrowanych szablonowo, czy znacznikowo, a nawet gdy zamiast tego mamy znacznik nagłówka.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. Dalej są sprawdzane, czy wprowadzony tekstjako pierwszy argument, czy jest nagłówkiem spisu treści rozdziału centrowanego, czy nagłówkowego.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza według elementu: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w tym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
tazlmc0919uudu7b89syi7ca2dymsuk
551326
551325
2026-08-11T00:25:04Z
Persino
2851
/* {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} */
551326
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Funkcja przede wszystkim służy do analizy innych obiektów niż szablon, czy znacznik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna. Funkcja słuzy przede wszystkim do analizy szablonów znaczników, czy normalnych ich, innych niż centrowania i nagłówków, ale nadal znaczników.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Funcja służy do rozważania nagłówków centrowanych szablonowo, czy znacznikowo, a nawet gdy zamiast tego mamy znacznik nagłówka.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. Dalej są sprawdzane, czy wprowadzony tekstjako pierwszy argument, czy jest nagłówkiem spisu treści rozdziału centrowanego, czy nagłówkowego.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza według elementu: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w tym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
ai5oygo8mcpf6cxsb9inf4rqpxoo5uj
551327
551326
2026-08-11T00:25:31Z
Persino
2851
/* Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} */
551327
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Funkcja przede wszystkim służy do analizy innych obiektów niż szablon, czy znacznik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna. Funkcja słuzy przede wszystkim do analizy szablonów znaczników, czy normalnych ich, innych niż centrowania i nagłówków, ale nadal znaczników.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Funcja służy do rozważania nagłówków centrowanych szablonowo, czy znacznikowo, a nawet gdy zamiast tego mamy znacznik nagłówka.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. Dalej są sprawdzane, czy wprowadzony tekstjako pierwszy argument, czy jest nagłówkiem spisu treści rozdziału centrowanego, czy nagłówkowego.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza według elementu: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w tym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdynie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
9jczvk3n2jytk980j7sc5tfi4n4eudg
551328
551327
2026-08-11T00:35:58Z
Persino
2851
/* Kod funkcji iteratora - funkcji zwracanej przez jego generatora */
551328
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Funkcja przede wszystkim służy do analizy innych obiektów niż szablon, czy znacznik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna. Funkcja słuzy przede wszystkim do analizy szablonów znaczników, czy normalnych ich, innych niż centrowania i nagłówków, ale nadal znaczników.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Funcja służy do rozważania nagłówków centrowanych szablonowo, czy znacznikowo, a nawet gdy zamiast tego mamy znacznik nagłówka.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. Dalej są sprawdzane, czy wprowadzony tekstjako pierwszy argument, czy jest nagłówkiem spisu treści rozdziału centrowanego, czy nagłówkowego.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza według elementu: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w tym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdy nie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, tzn. artykułów wstępnych, przed wszelkimi rozdziałami, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
5bhrvsbee6vz4zglwr8jfbj3gyk1dir
551329
551328
2026-08-11T00:53:53Z
Persino
2851
/* {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} */
551329
wikitext
text/x-wiki
<noinclude>{{ProstaStronaStart
| nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}}
| stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}}
}}</noinclude>
{{Spis treści}}
== {{Śródtytuł|p.IterTekst}}{{Code|p.IterTekst}} ==
Funkcja zwraca iterator, która jest funkcją, z zerową listą parametrów, a on zwraca napis wprowadzenia tekstu i jego tekst rozdziału wraz z innymi parametrami charakteryzujący ten rozdział. Przed uruchomieniem iteratora, gdy tekst jest zakodowaany, funkcja modyfikuje zawartość rozdziału, upraszcza na maksimum do ich zmodyfikowanej zawartości jego elementy, zostawiając jedynie zakodowane, to co wskazuje na odpowiednie linki wewnętrzne i zewnętrzne, nawet te inteligentne, w tych linkach wszystko jest zakodowane. Funkcja upraszcza kolejne linie łącząc je odpowiednio między sobą, bez linii, z którymi się nie da się tego zrobic, do tego służy: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}. Funkcja z całego zmodyfikowanego rozdziału wydziela spis treści z linkami, nawet inteligentnymi, korzystając z funkcji {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, aby dało się z niego wydzielić treściwe rozdziały i artykuły, bez tych zbędnych, aby za pomocą innych funkcji dało się to wszystko poprawnie ponumerować, bez numerowania tego, co nie potrzebne.
Ten zwracany iterator ma funkcję, czy rozważać, tylko rozdziały dodatnie, czy również ujemne i zerowe, do tego służy zmienna: {{LinkPatrz|czy_rozdzialy_analizowac}}. Ta funkcja za każdym razem uruchomienia tego zwraca inną linie charakteryzująca rozdział i zawartość nazwy rozdziału, także zwraca inną zawartość tekstu rozdziału, przynależną temu nagłówkowi, również dalsze parametry o wartościami zwracanych przez nią są zmienne określająca sam napis wprowadzenia tekstu, zmienne zwracane przez iterator są opisane w opisie poniżej. Iterator zwraca {{Code|nil}}, gdy nie znalazł dalej żadnego innego rozdziału, lub od razu też tą wartość, gdy w całym tekście nie ma żadnego jakikolwiek rozdziału.
Oprócz iteratora funkcja w nagłówku zwraca drugi argument, jako zmodyfikowany tekst, wstępnie przygotowany do dalszej analizy, aby dało się na nim ładnie operować.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
...
return function()
....
return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}, ale nie musi być tak: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, jeśli tekst jest zakodowany, w przeciwnym wypadku nie jest, tylko ten tekst jest zawartością danej strony,
* {{Code|nazwa_przestrzeni}} - jak w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/Rozdziały}},
* {{Code|nazwa_przestrzeni_ksiazki}} - jak w: {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_ksiazki}} - jak w: {{LinkPatrz|nazwa_ksiazki|StronicowyParser/Rozdziały}},
* {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/Rozdziały}},
* {{Code|czy_rozdzialy_analizowac}} {{Patrz|czy_rozdzialy_analizowac}} - czy ma tylko uwzględniać rozdziały, nie tylko, dodatnie równaniowe,
* {{Code|czy_dalej_rozwazac_zakodowane}} {{Patrz|czy_dalej_rozwazac_zakodowane}} - czy tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, ma być zakodowany, a jeśli jest taki, to są robione operacje na liniach, i wydzielonany jest tekst spisu treści z całego tego tekstu,
* {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/Rozdziały}},
* {{Code|tab_nazwa_spisow_przekierowaniowych}} - jak w: {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/Rozdziały}},
* {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA}} - funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adreesu szablonu, określa i zawraca jego zawartość,
* {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2}} - funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału),
* {{Code|__FUNKCJA_ANALIZA_SPISU}} {{Patrz|__FUNKCJA_ANALIZA_SPISU}} - funkcja do analizy i modyfikacji tekstu (może zwracać wartość: {{Code|nil}}) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: {{LinkŚródtytuł|p.IterTekst}}, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: {{Code|{{sr|SpisTreści|p=StronicowyParser}}}}, co jest uwidocznione w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}.
Parametry funkcji zwracanej:
* Funkcja nie przyjmuje żadnych parametrów.
Jednoczesne parametry zwracane przez funkcję zwracaną:
* {{Code|naglowek_tab_aktualnego_rozdzialu}} {{Patrz|naglowek_tab_aktualnego_rozdzialu}} - to jest tablica numerowana dwuelementowa, którego pierwszym elementem jest nagłówek rozdziału, a druga jest całą jego linią,
* {{Code|str}} {{Patrz|str}} - tekst napisu wprowadzenia tekstu (zawartość rozdziału),
* {{Code|poziom_aktualnego_rozdzialu}} {{Patrz|poziom_aktualnego_rozdzialu}} - poziom aktualnego rozdziału,
* {{Code|poczatek_aktualnego_rozdzialu}} {{Patrz|poczatek_aktualnego_rozdzialu}} - przedrostek aktualnego rozdzialu, dotyczy list, zaczynających się na: {{Code|<nowiki>[;%*:#]</nowiki>}}, {{Code|nil}}, gdy nie ma takiego rozdziału
* {{Code|numeracja_aktualnego_rozdzialu}} {{Patrz|numeracja_aktualnego_rozdzialu}} - numeracja aktualnego rozdziału, numeracja jest na podczątku rozdziału, a właściwy rozdział dalej, gdy nie ma numeracji, wtedy numeracja jest ciągiem pustym, lub {{Code|nil}},
* {{Code|czy_rozdzial_aktualny_centrowany}} {{Patrz|czy_rozdzial_aktualny_centrowany}} - przedstawia, czy rozdział jest rozdziałem dodatnim centrowanym znacznikowym lub szablonowym.
=== Wykorzystywane tablice w {{lpg|Lua}} w {{lpr|Lua|Scribunto}} ===
Te tablice są zdefiniowane w: {{Code|{{ld2|StronicowyParser/obiekty}}}}.
==== Szablony i znaczniki, wyróżniające linie, które są rozdziałami ====
Pierwszą tablicą jest {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}} słążaca do wskazania rozdziałów centrowanych. A ich odpowiedniki w postaci znacznikowych są w: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
==== Szablony, projektów i tekstów, usuwane z tekstu ====
Szablony, które są usuwane z tekstu są zdefiniowane w {{Patrz|p.szablony_do_usuwania_z_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_do_usuwania_z_tekstu={
--- szablony książkowe umieszczane na stronie głównej podręcznika
["Kolekcja"]=true,
["TODO"]=true,
["Wersja do druku"]=true,
--- szablony typowo linkowe
["Dane tekstu"]=true,
--- szablony linkowania do innych projektow
["MediaWiki"]=true,
["Wikipedia"]=true,
["Wikipedia kat"]=true,
["Wikipedia2"]=true,
["Commons"]=true,
["Commons ilustr kat"]=true,
["Commonsall"]=true,
["Commonscat"]=true,
["Wikiatlas"]=true,
["Wikicytaty"]=true,
["Wikicytaty przysłowia"]=true,
["Inkubator"]=true,
["Meta"]=true,
["Wikinews"]=true,
["Wikinewscat"]=true,
["Wikinewsy"]=true,
["Portal Wikinews"]=true,
["Wikisłownik"]=true,
["Wikisłownik-cat"]=true,
["Wikimedia"]=true,
["Multiwmpl"]=true,
["Wikipodróże"]=true,
["Wikispecies"]=true,
["Multisource"]=true,
["Wikiźródła"]=true,
["Wikiźródła autor"]=true,
["Wikiźródła kat"]=true,
["Wikiźródła kuch kat"]=true,
["Wikiźródła krótki"]=true,
["Wikisource-lang"]=true,
};
</syntaxhighlight>
Ona jest opisana w: {{Code|{{sr|#p.szablony_do_usuwania_z_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia ona szablony projektów zdefiniowane na stronie {{s|MediaWiki}}.
Aby w końcowych rozważaniach w napisie wprowadzenia tekstu i tekście rozdziału, aby były bez nich, by analiza tekstu przebiegała bezproblemowo, by z niego dało się wykryć poszczególne rozdziały linie i w nich artykuły, a także w liniach w nierozdziałach, wykryć artykuły w nich.
==== Szablony, z których z których zostawiane są tylko zawartości ====
Z rozważanego tekstu są usuwane elementy przy ponocy tablicy: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, która jest wykorzystywana przez funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}.
==== Inne szablony usuwane z tekstu ====
Tą tablicą, opisana w: {{Code|{{sr|#p.szablony_bez_generowania_napisowego|p=StronicowyParser/obiekty}}}}, jest o definicji {{Patrz|p.szablony_bez_generowania_napisowego}}:
<syntaxhighlight lang="lua">
p.szablony_bez_generowania_napisowego={
["Status"]=true,
};
</syntaxhighlight>
Przedstawia ona treści, szablony o pewnych nazwach, które z stworzącymi ich wywołaniami są usuwane z rozważanego tekstu. Są to szablony, które nie generują napisów wprowadzenia tekstu.
Inną tablicą, która przedstawia elementy do usuwania z tekstu, czyli o szablony o jakiś nazwach, opisana w: {{Code|{{sr|#p.szablony_nie_typowo_linkowe|p=StronicowyParser/obiekty}}}}, mającą określenie {{Patrz|p.szablony_nie_typowo_linkowe}}:
<syntaxhighlight lang="lua">
p.szablony_nie_typowo_linkowe={
["Plik"]=true,
["Kategoria"]=true,
["Kategorie"]=true,
["Wolumin"]=true,
["SortWolumin"]=true,
["SortKuchWolumin"]=true,
};
</syntaxhighlight>
Są to nazwy szablonów istniejących, którego na podstawie tego można stworzyć wywołania zawarte w tekście, które należy usunąć z niego. Są to szablony, które nie generują linków do artykułów jakiegoś podręcznika.
==== Znaczniki szablonowe ====
Definicję, jakie szablony uznać za znaczniki szablonowe, jest napisane w {{Patrz|p.znaczniki_szablonowe}}:
<syntaxhighlight lang="lua">
p.znaczniki_szablonowe={
["Znacznik"]=1,
["Div"]=1,
["Code"]=1,
["Tt"]=1,
["P"]=1,
["Sub"]=1,
["Sup"]=1,
["Span"]=1,
["Bdo"]=1,
["Small"]=1,
["Big"]=1,
["Strong"]=1,
};
</syntaxhighlight>
Opisana jest w: {{Code|{{sr|#p.znaczniki_szablonowe|p=StronicowyParser/obiekty}}}}. Są to odpowiedniki znaczników {{Strong|HTML}}, one po rozwinięciu właście to tworzą. One są usuwane odpowiednio z tekstu, tzn. ich zawartości sa pozostawiane, numer tego przedstawia wartość tabeli o kluczu równym nazwie tego szablonu.
==== Szablony generujące poziomy o dowolnym poziomie ====
Definicję szablonów generujące dowolny poziom napisu wprowadzenia tekstu jest {{Patrz|p.szablony_sztucznego_wprowadzenia_tekstu}}:
<syntaxhighlight lang="lua">
p.szablony_sztucznego_wprowadzenia_tekstu={
["HNumer"]=1,
};
</syntaxhighlight>
Opisana w: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, przedstawia szablony, która sztucznie generuje niemożliwe poziomy napisów wprowadzenia tekstu. Zawartością tego szablonu o nuerze stojącego przy wartości elementów w tej tablicy,jest poziom dodatni o dowolnym poziomie, nie tylko {{Code|<nowiki>0 < pozim <= 6</nowiki>}}, ale też i: {{Code|<nowiki>poziom>6</nowiki>}}.
==== Magiczne derektywy ====
Z tekstu są usuwane magiczne derektywy zdefiniowane w tablicy: {{Code|{{sr|#p.magiczne_derektywy|p=StronicowyParser/obiekty}}}}, jego definicja {{Patrz|p.magiczne_derektywy}}:
<syntaxhighlight lang="lua">
p.magiczne_derektywy={
["TOC"]=true,
["NOTOC"]=true,
["NOEDITSECTION"]=true,
};
</syntaxhighlight>
==== Napisy wprowadzenia tekstu, spisu treści lub spisu rzeczy, wykrywane funkcję ====
Napisy typu: {{Code|Spis treści}} lub {{Code|Spis rzeczy}}, które są wykrywane przez funkcję są zdefiniowane w {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}:
<syntaxhighlight lang="lua">
p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={
["spis treści"]=true,
["spis tresci"]=true,
["spis rzeczy"]=true,
};
</syntaxhighlight>
Aby elementy tej tablicy w odpowiednich rozdziałach w całości wykryć, należy użyć metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}. Ta tablica jest opisana w: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}}.
==== Artykuły nieartykularne (okładki) ====
Aby funkcja wykryła artykuły, które uznać za nieartykularne, nie za zwykłe artykuły, należy użyć wyrażeń regularnych zdefiniowanych w tablicy {{Patrz|p.artykularne_niespisowe}}:
<syntaxhighlight lang="lua">
p.artykularne_niespisowe={
[1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$",
--[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$",
};
</syntaxhighlight>
Ta tablica jest opisana w: {{Code|{{sr|#p.artykularne_niespisowe|p=StronicowyParser/obiekty}}}}. Ona powoduje, że elementy tego typu nie będą wykrywane w spisie artykułów danego podręcznika, bo np. przedstawiają one okładki tego typu, no bo jak uznać okładki za artykuły.
=== Przykłady ===
Przykładowe użycia:
<syntaxhighlight lang="lua">
local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
local __FUNKCJA_PARAMETRY=nil;
local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw)
return nil;
end;
local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY);
local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_modyfikatorow)
... ---- Funkcja aktualnie nieużywana;
local szablonowe_modul=require("Module:Szablonowe");
if(not szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow))then return nil;end;
---
pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
local tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true);
return tekst;
end;
local __FUNKCJA2=function(str,pelna_nazwa_strony,tablica_analizy_obiektow_strony_dany_modul,czy_naglowek)
...
return str;
end;
local __FUNKCJA_ANALIZA_SPISU=function(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
local stronicowyparser_analizaspisu_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
local tekst=stronicowyparser_analizaspisu_modul.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych);
return tekst;
end;
local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU);
---- iterator - iterator;
---- tekst_rozwiniety_calego_artykulu - tekst zakodowany maksymalnie zmodyfikowany przyszykowany do dalszej analizy;
local parsuj_rozdzialami=nil;
for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do
... --- Gdy tekst ma rozdziały iterowalne;
if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end
end;
if(not parsuj_rozdzialami)then
... ---- Gdy tekst nie ma rozdziałów iterowalnych;
end;
</syntaxhighlight>
=== Opis dalszy funkcji ===
Liczymy nazwę spisu bez nazwy przestrzeni szablonowej: {{Code|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}} {{Patrz|pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej}}, i nazwę szablonową tej strony: {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/Rozdziały}}. W tej ostatniej uwzględniamy również przestrzeń główną, w której tej ostatniej uwzględniamy sam dwukropek {{Code|:}}.
Definiujemy funkcje: {{Code|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{Code|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE}} {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, oraz do nich potrzebne zmienne.
Funkcja decyduje, czy wybrać blok z sekcję: {{Code|czy_dalej_rozwazac_zakodowane}} {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, czy nie, gdy wybieramy, to ta zmienna przyjmuje wartość {{Code|true}}, w innym wypadku ona przyjmuje wartość odpowiadającej fałszywej.
==== Kod z sekcją: {{Code|czy_dalej_rozwazac_zakodowane}} ====
Opis funkcji według tej sekcji dotyczy, gdy zmienna: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, jest zakodowana.
===== Definicje potrzebnych funkcji do opisu działającego kodu =====
Przedstawiamy tutaj definicję lokalnych funkcji.
====== {{Śródtytuł|UsuwanieNowychLiniiZnacznikowe}}{{Code|UsuwanieNowychLiniiZnacznikowe}} ======
Funkcja służy do modyfikacji tekstu tylko ze znacznikami i szablonami nowej linii i kresek w linii, tzn. ich zamiany każda z nich na jedną spację.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieNowychLiniiZnacznikowe(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Funkcja nie zmienia poziomu zakodowania tekstu, tzn. ona służy jedynie do znajdowania znaczników: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, oraz szablonów: {{s|Br}} i {{s|Hr}}, w nim, i zamieniania ich na jedną spację (odstęp).
Funkcja zwraca tak zmodyfikowany tekst, podany jako pierwszy parametr funkcji. Sprawdza, czy one wystąpiły przy {{Code|poziom_iteracji}} {{=}} {{Code|0}}, jeżeli występują, to ta funkcja zwraca drugi wynik w postaci wartości: {{Code|true}}, przeciwnie ta wartość jest: {{Code|nil}}.
====== {{Śródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}{{Code|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}} ======
Funkcja usuwa nowe zagnieżdzone linie w nowych liniach z szablonami i znacznikami centrowania, zastępując je odpowiednimi ich zawartościami, pozostawiając główną nową linię z szablonem lub znacznikiem centrowania.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji {{ZobaczTeż|szablon-obiekt-kod}}:
* {{Code|szablon}} - tekst do zmodyfikowania, jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, lub jego elementy bazy: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}},
* {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}},
* {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/Rozdziały}}.
Funkcja korzysta z funkcji: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}.
Te linie mogą być oznaczone szablonami: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, lub znacznikami: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}.
Funkcja zwraca tak zmodyfikowany tekst, z drugim parametrem {{Code|true}}, jeżeli zagnieżdzone napisy wprowadzenia tekstu wystąpiły, przeciwnie jest zwracany ten sam tekst, co został przyjęty jako pierwszy parametr funkcji, z drugim parametrem {{Code|nil}}.
====== {{Śródtytuł|Modyfikacja}}{{Code|Modyfikacja}} ======
Funkcja usuwa zagnieżdzone napisy wprowadzenia tekstu centrowania przy pomocy funkcji: {{LinkŚródtytuł|UsuwanieZagniezdzonychNapisowWprowadzeniaTekstu}}, nowe linie, nawet kresek, dzięki: {{LinkŚródtytuł|UsuwanieNowychLiniiZnacznikowe}}, nowe linie powstałe przez znak nowej linii: {{Code|<nowiki>\n</nowiki>}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local Modyfikacja=function(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja zwraca tekst zmodyfikowany z drugą wartością {{Code|true}}, a jeżeli nic się nie zmieniło, to druga wartość jest {{Code|nil}}, a pierwsza wartość, to niezmodyfikkowany: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, podany jako pierwszy argument tej funkcji.
====== {{Śródtytuł|UsuwanieZnacznikowe}}{{Code|UsuwanieZnacznikowe}} ======
Funkcja sprawdza, czy to jest napis wprowadzenia tekstu szablonowy przy pomocy tabeli: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, czy znacznikowy, którym jest: {{Tag|center}}, lub określone tabelą: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}. W obu tych rozgałęzieniach funkcji jest uruchamiana procedura: {{LinkŚródtytuł|Modyfikacja}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} {{Patrz|parametr1}} - to nic innego jak: {{Code|nazwa}} {{Patrz|nazwa}}, czyli jak nazwa znacznika,
** {{Code|parametr2}} {{Patrz|parametr2}} - to nic innego jak: {{Code|zawartość}} {{Patrz|zawartość}}, czyli zawartość znacznika,
** {{Code|parametr3}} {{Patrz|parametr3}} - to nic innego jak: {{Code|tab_atrybuty}} {{Patrz|tab_atrybuty}}, czyli atrybuty znacznika.
Jeżeli nic się nie zmieniło to funkcja zwraca wartość: {{Code|nil,true}}, a jeżeli przeciwnie to wartość zmienioną, ewentualnie ze zmodyfikowaną bazą {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} (ale zwracane bez niej, a wartość {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, która się nie zmieniła, jedynie jest brana do obliczeń, aby określić element pierwszy zrzucony przez tą procedurę), z drugą wartością {{Code|true}}.
Funkcja jedynie działa w dwóch sprawdzanych zakresach, tzn. {{Code|SZABLON}} i {{Code|ZNACZNIK}}, w nich wywoływana jest funkcja {{LinkŚródtytuł|Modyfikacja}}, którego drugi element określa, czy coś się zmieniło, a pierwszą wartością jest ta wartość zmieniona, lub nie.
====== {{Śródtytuł|PrzetwarzanieZnacznikowe}}{{Code|PrzetwarzanieZnacznikowe}} ======
Funkcja do przetwarzania ciągu (modyfikowanej treści), do odpowiedniego ustawiania linii.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local PrzetwarzanieZnacznikowe=function(komorka,nie_trimowanie)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|komorka}} - przetwarzana komórka - linia,
* {{Code|nie_trimowanie}} - czy jest włączona możliwość nie trimowania komórki.
Funkcja znaki odstępu dyktowane kodami: {{Code|{{Nowiki| }}}}, {{Code|{{Nowiki| }}}} i {{Code|{{Nowiki| }}}}, są zastępowane na pojedynczą spację, te spacje mogą być pokolei dla każdego kodu {{Strong|HTML}}. To już zamienione przypisuje pod starą wartością, a ta nowa jest trimowana, jeżeli ta funkcja w tej funkcji jest włączona poprzez zaprzeczenie drugiego parametru tej funkcji, którego tutaj powinna przyjmować nie wartość prawdziwą.
Jeżeli wyrażenie pasuje do starej wartości: {{Code|<nowiki>^%s*[#%*:;>]</nowiki>}}, to na poczatek tego czegoś nowego jest dodawany odstęp.
Jeżeli trimowanie jest włączone, to na poczatek są dodawane dwie nowe linie, a na końcu jedna, i to jest zwracane, w przeciwnym razie zwracana jest wartość równa otrzymanej nowej wartości tego czegoś.
====== {{Śródtytuł|ZamienNaKody}}{{Code|ZamienNaKody}} ======
Funkcja zamieniająca odpowiednie znaki na znaki kodu {{Strong|HTML}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function ZamienNaKody(zawartosc,czy_szablon)...end;
</syntaxhighlight>
* {{Code|zawartosc}} - zawartość modyfikowana, działa podobnie jak w: {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}},
* {{Code|czy_szablon}} {{Patrz|czy_szablon}} - czy zawartość modyfikowana jest od szablonu.
Funkcja sprawdza, czy pierwszy znak linii jest nową linią, jeśli nie, to znaki przechwytywane z: {{Code|<nowiki>^([=%*#:;])</nowiki>}}, są zamieniane na kody {{Strong|HTML}}.
Funkcja sprawdza, czy ostatni znak linii jest nową linią, jeśli nie, to znaki przechwytywane z pierwszego ciągu z: {{Code|<nowiki>([=])([^%S\n]*)$</nowiki>}}, są zamieniane tak jak poprzednio.
Funkcja w ten sposób zwraca zmodyfikowaną, lub nie, zawartość.
====== {{Śródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}{{Code|LiniaRozdzialyDodatnieOrazUjemne}} ======
Funkcja modyfikująca poszczególne linie według odpowiedniego schematu, czyli na podstawie odpowiedniego wzoru {{LinkPatrz|wzor}}, i sprawdza odpowiednio, czy tą linią jest rozdział dodatni {{LinkPatrz|czy_rozdział_dodatni}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function LiniaRozdzialyDodatnieOrazUjemne(wzor,czy_dodatni_rozdzial)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wzór}} {{Patrz|wzor}} - wzór przetwarzający linię,
* {{Code|czy_rozdział_dodatni}} {{Patrz|czy_rozdział_dodatni}} - czy linia reprezentuje rozdział dodatni.
Funkcja wydziela poszczególne linie wewnętrz siebie, i za pomocą pewnej funkcji wkładanej do niego jako drugi parametr, robi operacje na nich. Tą funkcją jest: {{Code|{{sr|#p.ZamianaZnakowaLinii|p=Szeregi}}}}.
Dla lini pasujących do wzoru {{LinkPatrz|wzor}}, to linie są kompletowane, używając funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}} (funkcja wykorzystuje procedury: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}), a w nim dla elementu {{Code|SZABLON}}, nowe linie: {{s|Br}}, nawet kreskowe: {{s|Hr}}, są zamieniane na spację. Szablony napisu wprowadzenia tekstu: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, są zamieniane na ich zawartości. A dla elementu {{Code|ZNACZNIK}}, czyli znaczniki: {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, są zamieniane na spację. A całe naczniki, tzn.: {{Tag|center}} i {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, są zamieniane na ich zawartości.
Dla znacznika: {{Tag|pre}}, czyli obiekt {{Code|PRE}}, gdy ona nie ma zawartości, to zamiast niego jest wyświetlana zawartość równą jednej spacji.
Dla specjalnego tagu {{Tag|nowiki}} mechanizmu MediaWiki znaki specjalne kodu zamieniane są na znaki kodu {{Strong|HTML}}, czyli według funkcji: {{Code|{{sr|#p.ZnakiSpecjalneTaguNowiki|p=Html}}}}. Gdy mamy rozdział dodatni według {{LinkPatrz|czy_rozdział_dodatni}}, wtedy znaki nowej linii {{Code|\n}} zawartości są zamieniane na znak jednej spacji. Podobnie robimy dla obiektu {{Code|ŻRÓDŁO}}.
===== Dalszy opis =====
Przed uruchomieniem głównego iteratora zwracanej przez tą funkcję, ona przez nią musi przejść przez te kroki, aby wyedytować odpowiednio tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
====== Zmiana tekstu krok 1 ======
Uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|p=Szablonowe}}}}, która służy do kodowania szablonów referencji w odpowiednie kody {{Strong|HTML}}, lub w edytować linki zewnętrzne {{Code|LINKZ}} bez nazwy, by napisać ich numerki uruchomień, aby była zachowana kolejność numerowania szablonów, w innych przypadkach uruchamia się funkcja: {{Code|__FUNKCJA_INNE_OPERACJE}} {{Patrz|__FUNKCJA_INNE_OPERACJE}}, która jest zdefiniowana na zewnętrz tej funkcji. Funkcja wykorzystuje też: {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE|StronicowyParser/Rozdziały}} i {{LinkPatrz|__FUNKCJA_OPERACJE_USUWANIE_BAZOWE|StronicowyParser/Rozdziały}}, zdefiniowane w tym module.
{{HNumer|1=
======= Opis funkcji {{LinkPatrz|__FUNKCJA_INNE_OPERACJE}}, jako pierwszy argument modyfikujący tekst, w przypadku innym niż szablony i znaczniki referencji - nazwane i nienazwane, oraz numerujące linki zewnętrzne nienazwane =======
}}
Funkcja się uruchamia, wtedy kiedy mamy do czynienia z szablonami innymi niż referencje nazwane i nienazwane, podobnie w przypadku znaczników innych niż referencje. Ona też działa w pozostałych przypadkach.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
function(szablon,obiekt,kod,parametr1,parametr2,parametr3,tekst)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}},
* Parametry znacznikowe:
** {{Code|parametr1}} - jak w: {{LinkPatrz|parametr1}}, jest to: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr2}} - jak w: {{LinkPatrz|parametr2}}, jest to: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
** {{Code|parametr3}} - jak w: {{LinkPatrz|parametr3}}, jest to: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}},
* {{Code|tekst}} - jak w: {{LinkPatrz|tekst|StronicowyParser/Rozdziały}}.
Gdy mamy {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, wtedy uruchamiamy funkcję:
{{HNumer|1=
======== {{Śródtytuł|FuncSzablon}}{{Code|FuncSzablon}} dla obiektów szablonowych, czyli typu SZABLON ========
}}
Funkcja zastępuje pewne elementy pewnym wyliczonym łańcuchem znaków, lub zwraca wartość {{Code|nil}}.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local FuncSzablon=function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|tabela_parametrow_szablonu}} - jak w: {{LinkPatrz|tabela_parametrow_szablonu|StronicowyParser/Rozdziały}},
* {{Code|nazwa_szablonu}} - jak w: {{LinkPatrz|nazwa_szablonu|StronicowyParser/Rozdziały}},
* {{Code|tabela_modyfikatorow}} - jak w: {{LinkPatrz|tabela_modyfikatorow|StronicowyParser/Rozdziały}}.
{{HNumer|1=
========= Szablony sztucznego wprowadzenia tekstu =========
}}
Sprawdzamy, czy to jest jeden z szablonów z tabeli o nazwach kluczy z: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, na podstawie, której sprawdzamy, czy istnieje element tekstu, który jest bardzo ważny w analizie tych szablonów. A jeżeli ten parametr istnieje w zestawie parametrów, wtedy ustawiamy zmienną modykacji szablonu: {{Code|czy_modyfikacja}}, na wartość {{Code|false}}, aby było wiadomo, że modyfikacji w szablonie nie dokonano, jeżeli w nim nie znaleziono znaczników. Co potem uruchamiamy funkcję kopletowania tekstu wikikodu analizowanego szablonu: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, by zawartość znacznika {{Tag|div}} zastąpić jego zawartością, wtedy i tylko wtedy, gdy funkcja: {{Code|{{sr|#p.KodZnacznikaWeNapisieWprowadzeniaTekstuDodatniegoAlboUjemnego|b=tak}}}}, na podstawie analizy parametru: {{Code|tekst}}, zwróci wartość {{Code|true}}, a wtedy się nie dzieje, gdy w zawartości jest nowa linia, a a przeciwniew aniej są rozdziały dodatnie, czy ujemne, wtedy na ten parametr sa uruchamiane pewne funkcje, anulujące własciwości tychrozdziałów, i w takim razie jest ustawiany ten parametr modyfikacji na wartość prawdziwą, i wtedy kod tego szablonu jest zastąpiony odpowiednio zmodyfikowaną zawartością tego szablonu.
Po wyjściu z funkcji kompletowania jest sprawdzana zmienna modyfikacji: {{Code|czy_modyfikacja}}, czy przybiera wartość prawdziwą, a jeżeli tak, to zwracana jest wartość z tej funkcji na zewnątrz opisywanej.
{{HNumer|1=
========= {{Śródtytuł|AnalizaSzablonu}}{{Code|AnalizaSzablonu}} =========
}}
Uruchamiamy funkcję: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|b=tak}}}}, używając tabeli: {{LinkPatrz|p.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu|StronicowyParser/Rozdziały/Tom III}}, do analizy szablonu podanej w parametrach szablonu, aby go zastąpić jego odpowiednią zawartością, a jeżeli ona zwróci jakiś nienilowy wynik, to ta funkcja przybiera tą wartość w postaci zwracanej, w innym wypadku jest sprawdzane, czy nazwa szablonu pasuje do jednych do kluczu z tabel: {{LinkPatrz|p.szablony_do_usuwania_z_tekstu}}, {{LinkPatrz|p.szablony_bez_generowania_napisowego}} i {{LinkPatrz|p.szablony_nie_typowo_linkowe}}. Jeżeli pasuje, to funkcja zwraca ciąg pusty, przeciwnie wartość {{Code|nil}}.
{{HNumer|1=
========= Parametry funkcji {{LinkŚródtytuł|AnalizaSzablonu}} =========
}}
Funkcja analizująca szablon pod pewnymi warunkami zamieniające pewne zawartości wywołań szablonów na wartości puste lub nie zwracające żadnej wartości.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function AnalizaSzablonu(szablon)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}.
Gdy funkcja {{LinkŚródtytuł|AnalizaSzablonu}}, zwróci wartość odpowiadających łańcuchowi znaków, wtedy opisywana funkcja nadrzędnna zwraca wartość pustą, to wtedy funkcja: {{LinkŚródtytuł|FuncSzablon}}, ma zwracaną wartość równą tej wartości, a jeżeli nie ma jej, to ona idzie dalej.
{{HNumer|1=
========= Modyfikacja napisów wprowadzenia tekstu szablonowych =========
}}
Uruchamiana jest funkcja {{LinkŚródtytuł|UsuwanieZnacznikowe}}, która zwraca dwie wartości {{Code|szablon}} i {{Code|czy_center}}.
{{HNumer|1=
========= Szablony generowania nagłówków - generowanie zawartości na podstawie pewnych wniosków =========
}}
{{Tab}}Jeżeli pierwszy parametr tej funkcji zwróci wartość nie {{Code|nil}}, wtedy wiadomo, że zawartość szablonu się zmieniła, wtedy sprawdzamy, czy wywołanie szablonowe, jest jednych ze znaczników: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli tak, to liczy jego zawartość, a jeśli ona istnieje, wtedy sprawdzamy, czy w niej jest rozdział dodatni, czy ujemny, a jeżeli jest, to funkcja zwraca tą zawartość z tabelą parametrów szablonu.
{{HNumer|1=
========== Aktualizacja bazy danych kodowania '''szablonowego''' zakodowanego wikikodu ==========
}}
Po wyjściu z tej funkcji jest sprawdzane, czy funkcja zwróci wartość odpowiadająca prawdziwej, jeżeli tak, to ona zwróci ten wynik, jeżeli nie, to aktualizowana jest pozycja z: {{Code|szablon}} {{Code|{{=}}}} {{Code|szablon}}, według:
<syntaxhighlight lang="lua">
tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
</syntaxhighlight>
A sama funkcja {{LinkŚródtytuł|FuncSzablon}} zakańcza się z wartością {{Code|nil}}.
{{HNumer|1=
========= Szablony generowania nagłówków - bez modyfikacji szablonów napisu wprowadzenia tekstu =========
}}
A gdy {{Code|szablon}} odpowiada wartości fałszywej, a {{Code|czy_center}} prawdziwej, wtedy szablon nie został zmodyfikowany, w takim razie sprawdzamy, czy nazwa szablonu pasuje do tej samej tabeli, co poprzednio dla prawdziwego {{Code|szablon}}, ale tutaj jest fałszywe, wtedy robimy podobne operacje, ale tym razem bez tabeli parametrów.
{{HNumer|1=
========= Szablony znaczników odpowiadające właściwym znacznikom '''HTML''' innym niż centrowania i nagłówków =========
}}
A gdy {{Code|szablon}} i {{Code|czy_center}} są równe odpowiadającej wartości fałszywej, wtedy sprawdzamy, czy szablon jest znacznikiem szablonowym z tabeli o pewnych kluczach: {{LinkPatrz|p.znaczniki_szablonowe}}. A jeżeli ma parametr z zawartością, to go przekształcamy szablonem {{LinkŚródtytuł|ZamienNaKody}}, by usunąc magiczność rozdziałów dpdatnich i ujemnych,jeżeli on znajduje się na samym poczatku, czy końcu zawartości.
Jeżeli funkcja jest tak zdfiniownana, tzn.: {{LinkŚródtytuł|FuncSzablon}}, jeżeli ma wynik odpowiadający prawdziwej wartości, wtedy jest zwracane {{Code|wynik,nil,true}} - co tutaj odpowiada zastępowaniom wartości, przeciwnie {{Code|nil,true}}, co tutaj odpowiada nierozwijaniu tej wartości.
{{HNumer|1=
======== Dalszy opis funkcji - obiekty nieszablonowe, czyli typu ZNACZNIK i inne ========
}}
{{Tab}}Dla {{Code|obiekt}} {{Code|{{=}}}} {{Code|ZNACZNIK}}, gdy nazwa znacznika nie jest {{Tag|center}} lub znacznikem wprowadzenia tekstu z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wtedy gdy jest nierówny: {{Tag|ref}}, {{Tag|br|pojedynczy}} i {{Tag|hr|pojedynczy}}, zatem definiujemy funkcją {{Code|fun}}, która zwracamy w postaci parametrów, do funkcji jako w zestawie argumentów zrzuconych: {{Code|fun,nil,true}}.
{{HNumer|1=
========= Znaczniki inne niż {{Tag|div}} =========
}}
Funkcja {{Code|fun}} ma definicję, która nie przyjmuje żadnych parametrów. W tej funkcji, gdy znacznik nie jest równy {{Tag|div}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, a potem na jego wyniku {{LinkŚródtytuł|ZamienNaKody}}, a jeżeli zawartość nie istnieje, to ona zwróci wynik równy ciągowi pustemu.
{{HNumer|1=
========= Znaczniki warstw {{Tag|div}} =========
}}
A gdy jest jednak tym znacznikiem, to wtedy używamy funkcji dla parametru {{Code|tekst}}, czyli dla elementu wywołania szablonowego, gdy nie ma w nim rozdziałów dodatnich, czy ujemnych, czy są nowe linie, wtedy przetwarzamy jego wynik, używając funkcji zastępowania {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, przetwarzając i modyfikując odpowiednio niepustą i istniejącą jego zawartość, co następnie go zwracając. Dla innejjego zawartości jest zwracany ciag pusty.
{{HNumer|1=
========= Inne znaczniki niż rozważane wcześniej jako podstawa =========
}}
{{Tab}}Gdy znacznik nie jest tym, co myślimy, wtedy jest sprawdzana zawartość, czy istnieją w nim rozdziały dodatnie lub ujemne, to zwracany jest wynik taki symbolizujący według dokumentacji zastąpienie znacznika jego zawartością.
{{HNumer|1=
========= Znaczniki zostały zmodyfikowane przez funkcję obrabające znaczniki do jednej linii =========
}}
{{Tab}}Jeżeli funkcja nie przeszła dalszych etapów, to sprawdzany jest wynik funkcją {{LinkŚródtytuł|UsuwanieZnacznikowe}}, do modsyfikacji szablonowej i znaczniowej, jeżeli ma wartość równą odpowiadającej prawdziwej, wtedy w tabeli bazy kodów {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}} dla tego obiektu i kodu jest naprawiana jego treść według tego wyniku uzyskanego z tej ostatniej funkcji.
{{Tab}}Dalej rzucany jest wynik nierozwijania, jeśli funkcja doszła do tego etapu.
{{HNumer|1=
======== Inne znaczniki specjalne mechanizmu MediaWiki oraz linki zewnętrzne i wewnętrzne ========
}}
Gdy obiekt jest równy {{Code|INNEPRE}} i zawartość składa się jego z samych odstępów, wtedy on jest zastępowany ciągiem pustym. Przeciwnie jest zrzucany wynik nierozwijania tego elementu.
{{HNumer|1=
========= Obiekty linków zewnętrznych i wewnętrznych =========
}}
Gdy mamy obiekt równy: {{Code|LINKW}} lub {{Code|LINKZ}}, wtedy uruchamiamy funkcję: {{Code|{{sr|#p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu|b=tak}}}}, opisaną wcześniej, w nim znaczniki są zamieniane na ich zawartość, a jeżeli w nim tego nie ma, to nic nie jest robione.
Gdy dało się wtedy zaktualizować zmienną: {{LinkPatrz|szablon|StronicowyParser/Rozdziały}}, to wtedy zmieniamy zawartość dla tego obiektu i kodu w tabeli bazy kodowania: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/Rozdziały}}, na tą zawartość.
Sprawdzamy, czy ten link symbolizuje element spisu, którą sprawdzamy według funkcji: {{Code|{{sr|#p.CzyElementSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli nie, to funkcja zwraca wartość pustą, którą jest zastępowany taki link.
{{HNumer|1=
======== Wikitabele jako obiekty kodowania szablonowego, czyli elementy typu WIKITABELA ========
}}
Gdy obiekt jest o wartości {{Code|WIKITABELA}}, to wtedy wykorzystujemy zestaw funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.ustring.gsub|b=tak}}}} i {{LinkŚródtytuł|PrzetwarzanieZnacznikowe}}, aby przetworzyć tekst z tabelką, do zwykłych odnośników z linkami z wikitabeli, na przykład. Na samym końcu funkcja zwraca wynik do zastąpienia takiej wikitabeli pewnym ciągiem w odpowiedni udokomentowany sposób.
====== Zmiana tekstu krok 2 ======
Uruchamiana jest dwa razy funkcja: {{LinkŚródtytuł|LiniaRozdzialyDodatnieOrazUjemne}}, raz dla rozdziału dodatniego równaniowego, a raz następnie dla pozycji listy w mechanizmie '''MediaWiki''', ta funkcja działa dla każdej linii w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}. Funkcja upraszcza zawartość tych linii (rozdziałów) do najprostrzej postaci, by w nim bie byłó znaczników nagłówków, a nawet nagłówków przygotowanych z szablonów centrowania szablonowego lub znacznikowego. Znaczniki nowej linii i kreski poziomej, czy znaki nowej linii, są zastępowane spacją.
Zmaczniki {{Code|PRE}} w tych rozdziałach są zastępowane jego zawartością, odpowiednio modyfikując znaki specjcalne. Podobnie jest z elementami {{Code|ŹRÓDŁO}} i {{Code|NOWIKI}}. W tych dwóch pierwszych obiekrach. Znak nowej linii jest zastępowany wtedy spacją, jeśli on znajduje się w rozdziale dodatnim.
====== Zmiana tekstu krok 3 ======
Dla obiektu szablonowego typu {{Code|SZABLON}}, a w nim dla szablonów, napisu wprowadzenia tekstu, których ich nazwy pasują do: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, to dla obu stron ich kodów wstawiana jest podwójna nowa linia, a szablony o nazwach z tabeli: {{LinkPatrz|p.szablony_sztucznego_wprowadzenia_tekstu}}, których wywołania są zamieniane na znacznik napisu wprowadzenia tekstu typu: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, w których po obu stronach wstawiana jest podwójna nowa linia.
Dla obiektu {{Code|ZNACZNIK}}, a w nim dla znacznika: {{Tag|center}}, lub dla {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, wstawiane jest, po obu stronach ich kodów, podwójna nowa linia.
Dla obiektu {{Code|INNEPRE}}, dla jego kodu, po obu jego stron, wstawiana jest pojedyncza nowa linia.
A nareście dla obiektow: {{Code|PRE}}, {{Code|ŹRÓDŁO}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} i {{Code|PUDEŁKOWEJŚCIA}}, w przypadku ich kodów, wstawiane jest po obu ich stronach podwójna nowa linia.
==== Kod wspólny przed integracją linii i wyodrębnieniem spisu treści ====
Z {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} są usuwane komentarze typu według wzoru w {{Lpg|Lua}} w {{lpr|Lua|Scribunto}} taki: {{Code|<nowiki><!%-%-.-%-%-></nowiki>}}, a także magiczne derektywy według {{LinkPatrz|p.magiczne_derektywy}}.
A także po nowych liniach kreskowych wstawiana jest nowa linia wraz ze spacją po nich.
==== Integracja linii i wyodrębnienie spisu treści dla treści zakodowanych ====
Linie są integrowane według: {{Code|{{sr|#p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia|b=tak}}}}, a później wydzielany jest odpowiedni spis treści z tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według funkcji podanej w nagłówku, ale też w funkcji w tabeli transportu, na podstawie użycia funkcji: {{Code|__FUNKCJA_ANALIZA_SPISU}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISU}}, jeżeli została podana.
==== Kod dalszy bez wybranej sekcji: {{Code|czy_dalej_rozwazac_zakodowane}} (dla każdego rodzaju treści, tzn. zakodowanych i niezakodowanych) ====
Liczymy iterator {{Code|iter_main}} {{Patrz|iter_main}} z generatora: {{Code|{{sr|#p.IteratorLiniiTekstu|p=Szeregi}}}}, na możliwym zmodyfikowanym tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}.
Dla tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a właściwie dla ich kopii, jest przyłączana metatabela typu {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}.
Zmienna: {{Code|czy_w_spisie_tresci}} {{Patrz|czy_w_spisie_tresci}}, jest inicjowana wartością {{Code|true/nil}} na podstawie {{LinkPatrz|czy_rozdzialy_analizowac}}, zatem:
<syntaxhighlight lang="lua">
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
</syntaxhighlight>
A także jest uruchamiany sam parser nowych linii {{Code|parser}} {{Patrz|parser}}, który analizuje linie bez linii z rozdziałami dodatnimi równaniowych, którego funkcja inicjująca jest: {{Code|{{sr|#p.ParserPodawaniaNapisuWprowadzeniaTekstu|b=tak}}}}.
Dalej są definicje funkcji dalsze, a jeszcze dalej jest uruchamiana funkcja iteratora funkcji: {{Code|{{sr|#p.IterTekst|b=tak}}}}.
==== Kod wspólny ====
===== {{Śródtytuł|Wystepowanie}}{{Code|Wystepowanie}} =====
W niej są zdefiniowane funkcje, których opisy ich definicji są podane poniżej. Ona też posiada dalszy kod, których opis jest pod nimi.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Wystepowanie(linia,funkcja1,funkcja2)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|funkcja1}} {{Patrz|funkcja1}} i {{Code|funkcja2}} {{Patrz|funkcja2}} - funkcja pierwsza, gdy: {{Code|tak}} {{Patrz|tak}}, jest prawdą, a druga fałszem.
Wartość: {{Code|czy_znaleziono_okladka}} {{Patrz|czy_znaleziono_okladka}}, przyjmuje wartość {{Code|false}}, na samym początku definicji tej funkcji, co symbolizuje ustwioną na samym początku brak okładek w spisie.
====== {{Śródtytuł|RozwazajLinie}}{{Code|RozwazajLinie}} ======
Funkcja sprawdza zmienne: {{Code|szablon}}, {{Code|obiekt}} i {{Code|kod}}, funkcją: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}, która służy do analizy linków wewnętrznych {{Code|LINW}} i zewnętrznych {{Code|LINKZ}}, a także szablonowych linków inteligetnych, którego argumentami są artykuły książki, ale niekoniecznie, ale zawsze bądź razem jest to jakaś strona wewnętrzna, czy zewnętrzna, ale wewnątrz projekt, wykorzystując przy okazji, jednocześnie, funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}.
Funkcja przede wszystkim służy do analizy innych obiektów niż szablon, czy znacznik.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinie(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja sprawdza, czy napotkany artykuł niepusty, innyniż artykuł książki, lub jego artykuł, ale nie okładka, wtedy funkcja zwraca z wartością {{Code|1}}. W innym rozgałezieniu tej instrukcji ona rewiduje, czy parametr szablonowy wskazuje na link okładkę, jeżeli tak, to ustawia zmienną na wartość prawdziwą, zmienną odpowiedzialną za linki okładek.
Dla istniejącego parametru {{Code|kom}} ona zwraca wynik {{Code|0}}.
====== {{Śródtytuł|RozwazajLinieZnacznikowe}}{{Code|RozwazajLinieZnacznikowe}} ======
Funkcja rozważa ogólnie linie z obietami {{Code|SZABLON}} albo {{Code|LINKW}} lub {{Code|LINKZ}}, czy nie są obiektami linków okładek, a w przypadku,gdy taką jednak złapał, to ustawiana jest pewna zmienna. Funkcja słuzy przede wszystkim do analizy szablonów znaczników, czy normalnych ich, innych niż centrowania i nagłówków, ale nadal znaczników.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function RozwazajLinieZnacznikowe(zawartosc)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|zawartosc}} {{LinkPatrz|zawartosc|StronicowyParser/Rozdziały/Tom II}} - zawartość obiektu kodu bazy danych kodowania zakodowanego wikikodu.
Funkcja uruchamia funkcję iteratora bazy danych kodowania wikikodu, funkcja pomija elementy nie okładek, zatrzymując się właśne na nich, rozwijąc pierwszą z koleii okładkę. Iterator iteruje po zawartości jakiegoś elementu, aż do zakończenia danych, lub na podstawie decyzji przerwania analizy przez funkcję wewnętrz, aby analizować do pierwszego wspomnianego elementu.
{{HNumer|1=
======= {{Śródtytuł|CenterZnacznikLinia}}{{Code|CenterZnacznikLinia}} =======
}}
Funkcja właściwa do rozwazania szczególnego z obiektami.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function CenterZnacznikLinia(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję {{LinkŚródtytuł|RozwazajLinie}}, jeżeli ona zwraca wartość: {{Code|nil}} lub {{Code|1}}, wtedy funkcja się zakańcza, przeciwnie funkcja zrzuca: {{Code|szablon}} (pierwsza wartość zwracana), {{Code|tekst}} (druga).
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja sprawdza dla obiektów szablonowych: {{Code|SZABLON}}, oraz obiektów linkowych: {{Code|LINKW}} i {{Code|LINKZ}} funkcją {{LinkŚródtytuł|CenterZnacznikLinia}}, wtedy za każdym razem ta funkcja zwraca wynik: {{Code|return szablon,tekst}}, która jest zrzucana do funkcji pierwszej iteratora, która zatrzymuje pętle kiedy chce.
W innych przypadkach niż te obiekty wyżej opisane funkcja nie zwraca żadnego wyniku, co odpowiada wartości: {{Code|nil}}, wtedy pętla iteratora jest przerywana.
====== {{Śródtytuł|spis_tresci}}{{Code|spis_tresci}} ======
Jest to funkcja ogólna do rozwazania szablonów centrowania spisów treści. Funcja służy do rozważania nagłówków centrowanych szablonowo, czy znacznikowo, a nawet gdy zamiast tego mamy znacznik nagłówka.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function spis_tresci(wystepowanie_linkow,hn_number)...end;
</syntaxhighlight>
Parametry funkcji:
* {{Code|wystepowanie_linkow}} {{Patrz|wystepowanie_linkow}} - zawartość szablonu spisu treści z linkami,
* {{Code|hn_number}} {{Patrz|hn_number}} - czy to jest zawartość szablonu centrowania.
Uruchamiana jest funkcja iteratora: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, którą iterujemy po całym zestawie dostępnych danych, którą w każdym momencie może być przerwana przez zwracanie wartości do funkcji. Funkcja służy do sprawdzenia, czy w spisie są jakieś początkowe artykuły, które nie należą do żadnego rozdziału, tzw. artykuły wstępne. Dalej są sprawdzane, czy wprowadzony tekstjako pierwszy argument, czy jest nagłówkiem spisu treści rozdziału centrowanego, czy nagłówkowego.
{{HNumer|1=
======= {{Śródtytuł|Spis}}{{Code|Spis}} =======
}}
Jest to funkcja szczególna do rozwazania szablonów centrowania spisów treści.
Definicja skrótowa funkcji:
<syntaxhighlight lang="lua">
local function Spis(szablon,obiekt,kod)...end;
</syntaxhighlight>
Parametry funkcji:
* Jak w: {{LinkZobaczTeż|szablon-obiekt-kod}}.
Funkcja uruchamia funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/obiekty}}}}, wykorzystując przy okazji funkcję: {{LinkŚródtytuł|p.__FUNKCJA_KOMPLETOWANIA|StronicowyParser/Rozdziały/Tom III}}, jeżeli wartość któraś zwracana jest {{Code|kom}}, ona ma wynik odpowiadający wartości fałszywej, czyli to nie jest linku spisu treści, wtedy dla istniejącego wpisu w pierwszej wartości sprawdzanej dla artykułu książki, funkcja sprawdza według elementu: {{Code|{{sr|#p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|p=StronicowyParser/AnalizaSpisuRzeczy}}}}, czy to jest artykuł spisu treści, czy rzeczy, wtedy są inicjowane zmienne: {{Code|tak_ce_spis_tresci}} {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{Code|szablon_spis_tresci}} {{Patrz|szablon_spis_tresci}}, odpowiednimi wartościami, i jest zwracana wartość {{Code|1}}, w przypadku, gdy napotkano szablony, czy znaczniki, ale centrowania.
Dla innej wartości {{Code|kom}} zwracana jest wartość {{Code|0}}.
W pozostałych wypadkach funkcja nie zwraca żadnego wyniku.
{{HNumer|1=
======= Dalszy opis funkcji =======
}}
Funkcja dla obiektu: {{Code|SZABLON}}, oraz {{Code|LINKW}} i {{Code|LINKZ}}, uruchamia funkcję {{LinkŚródtytuł|Spis}}, której jeżeli wynik istnieje, to jest zwracany.
Przeciwnie w innym wypadku wypadku parametr {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}} jest kompletowany, jeśli istnieje, i trimowany jest funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=mw.text.trim|b=tak}}}}, co dalej jest sprawdzana kopią tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, połączonej z metatabelką, ta tabela opisuje mniej więcej rozdziały spisu rzeczy, czy treści, a jeżeli to napotkano, wtedy inicjowane są zmienne: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|szablon_spis_tresci}}, odpowiednimi wartościami, tzn. kolejno: {{LinkPatrz|hn_number}} i {{LinkPatrz|wystepowanie_linkow}}, ze zmiennych parametrów w definiowanej funkcji, w tym przypadku jest zwracana wartość {{Code|1}}.
W innym wypadku nie jest zwracana żadna wartość.
====== Kod dalszy funkcji ======
{{HNumer|1=
======= Warunki wstępne =======
}}
Liczymy zmienną: {{Code|wystepowanie_linkow}} {{LinkPatrz|wystepowanie_linkow}}, przechwytując wartość z: {{Code|<nowiki>^[#:%*;%d%.>]+%s*(.+)$</nowiki>}}, jeśli istnieje, lub z: {{Code|<nowiki>^(%S+%s*.+)$</nowiki>}}.
Gdy mamy włączoną opcję: {{LinkPatrz|czy_dalej_rozwazac_zakodowane}}, co mówi o kodowanym wikitekście, czyli dla tekstu {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, wtedy możemy powiedzieć, ze również {{LinkPatrz|wystepowanie_linkow}}, w tej funkcji jest zakodowane.
{{Tab}}Gdy tak otrzymana zmienna istnieje, wtedy można powiedzieć, że będziemy za pomocą wcześniejszych funkcji znajdowali początkowe artykuły, który nie są przydzielone do żadnego rozdziału, dodatniego, czy ujemnego, na początku otrzymanego spisu treści dla jego początkowych linii.
{{HNumer|1=
======= Iterator po rozważanej zmiennej, czyli iteracja po tekście =======
}}
Uruchamiamy iterator po naszej wartości rozważanej zmiennej, z pierwszą jedyną funkcją, która przerywa iterację, gdy zwróci wartość {{Code|nil}}, jest później uruchamiana iteracja, która może się przerwać, kiedy chce, lub po zakończeniu zasobów danych.
Funkcja, użyta w definicji iteratora, wchodzi do jej ciała właściwego, gdy: {{LinkPatrz|obiekt|StronicowyParser/Rozdziały}}, jest równe {{ZobaczTeż|obiekt}}: {{Code|SZABLON}}, {{Code|ZNACZNIK}}, {{Code|LINKW}} i {{Code|LINKZ}}.
{{HNumer|1=
======== Obiekt szablonowy, czyli typu SZABLON ========
}}
W tej funkcji, gdy obiekt to {{Code|SZABLON}}, sprawdzamy, czy on jest szablonem napisu wprowadzenia tekstu o nazwie z: {{LinkPatrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy|StronicowyParser/Rozdziały/Tom IV}}, jeżeli jest, to kiedy jego zawartość istnieje, wtedy jest liczona zmienna jego zawartości tego szablonu ze wzoru przechwytywania: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, co do liczenia wartości {{Code|wartosc}} {{Patrz|wartosc}}, wykorzystujemy funkcję: {{LinkŚródtytuł|spis_tresci}}, do liczenia szablonów nagłówka, ale przed pierwszymi pierwszymi artykułami, lub artykułami w nagłówku. A gdy ta zawartość nie istnieje, to wtedy do liczenia tego korzystamy z: {{LinkŚródtytuł|RozwazajLinie}}, do rozważania całych linii z obiektami, jakich są okładki, a gdy to nie jest ten szablon, to z: {{LinkŚródtytuł|RozwazajLinie}}, a jeżeli jego wartość zwracana istnieje, to ustawiana jest wartość: {{Code|podrecznik}} {{Patrz|podrecznik}}, na wartość {{Code|true}}, czyli znalazł okłądkę, przeciwnie na {{Code|false}}, a tu już nie.
{{HNumer|1=
======== Obiekt znacznikowy, czyli typu ZNACZNIK ========
}}
A gdy ten obiekt to {{Code|ZNACZNIK}}, gdy istnieje jego zawartość, to dla znacznika {{Tag|center}} dla tekstu przechwytywanego z jego zawartości: {{Code|<nowiki>^'*%s*(.-)%s*'*$</nowiki>}}, wtedy jest uruchamiana {{LinkŚródtytuł|spis_tresci}}, a gdy to nie jest ten znacznik, a może to jest jeden z: {{LinkPatrz|p.znaczniki_wprowadzenia_tekstu|StronicowyParser/Rozdziały/Tom II}}, to wydzielamy z jego zawartości, z wartości przechwytywania, z takiego samego wzoru, co poprzednio, co później wywołujemy {{Code|{{sr|#p.HnNumerWprowadzeniaTekstu|b=tak}}}}, do badania zwykłych nagłówków, a potem z tym parametrem, jako drugą wartość, a pierwszą jest tak otrzymana z przechwytywania wsadzamy do funkcji: {{LinkŚródtytuł|spis_tresci}} i liczymy {{LinkPatrz|wartosc}}. A jeżeli nie dopasowano żadnego, z tych, znacznika, to liczymy {{LinkPatrz|wartosc}} z {{LinkŚródtytuł|RozwazajLinieZnacznikowe}}.
{{HNumer|1=
======== Obiekty linkowe, czyli typu: LINKW i LINKZ, a więc linki wewnętrzne i zewnętrzne ========
}}
Dla obiektów: {{Code|LINKW}} i {{Code|LINKZ}}, wykorzystujemy funkcję: {{LinkŚródtytuł|RozwazajLinie}}, do liczenia {{LinkPatrz|wartosc}}, a gdy ona istnieje, to {{LinkPatrz|podrecznik}} ustawiamy na {{Code|true}}, dla przypadku, gdy napotkano okładkę, przeciwnie na {{Code|false}}, a tu już nie, tak jak dla obiektu {{Code|SZABLON}}.
====== Kod uruchamiany w zależności od wartości logicznej zmiennej {{Code|podrecznik}} ======
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|true}}
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}} jest {{Code|true}}, i gdy zmienna {{Code|czy_rozdzial}} {{Patrz|czy_rozdzial}}, jest bez wartości, wtedy dla {{LinkPatrz|wartosc}} równej {{Code|1}}, wtedy w zmiennej {{Code|wystepowanie_linku_lub_szablonu}}, liczy występowanie danego elementu na początku tekstu, pod warunkiem, że tekst nie kończy się na {{Code|.}}, dla określonej linii nieporządnej linii. W ten sposób możemy sprawdzić, czy są artykuły, których nie należy uwzględniać w tabeli artykułów, a jeżeli nie ma takich artykułów, wtedy zwracane jest {{Code|nil}}, przeciwnie ustawiana jest wartość: {{LinkPatrz|czy_rozdzial}}, na {{Code|true}}. A gdy {{LinkPatrz|wartosc}} jest równa {{Code|0}}, wtedy {{ZobaczTeż|wartosc}} jest liczone występowanie elementu, i zwracana jest wartość pusta z drugim nienilowym argumentem, gdy występowań liczonych jest większa niż zero, wtedy zawartość zmiennej {{Code|tekst}} jest podmieniana, w innym wypadkujuż nie.
; Zmienna {{Code|podrecznik}} {{Code|{{=}}}} {{Code|false}}
{{Tab}}Gdy {{LinkPatrz|podrecznik}} ma wartość {{Code|false}}, wtedy dla żadnej wartości {{LinkPatrz|wartosc}}, gdy zmienna: {{LinkPatrz|czy_znaleziono_okladka}} {{ZobaczTeż|czy_znaleziono_okladka}}, ma wartość prawdziwą, wtedy sprawdzamy, czy przed kodem jest ciąg znaków określone wzorem {{Code|<nowiki>[%s%p]*<[%s<]-%s*'*%s*</nowiki>}}, jeżeli nie, to zwracamy w podobny sposób, jak to liczyliśmy wcześniej dla {{LinkZobaczTeż|wartosc}}, a jeśli jednak tak, to zmienna: {{LinkPatrz|czy_znaleziono_okladka}}, przybiera wartość odpowiadającej {{Code|false}}, dla tego przypadku nic nie zwracamy w tym rozgałęzieniu instrukcji warunkowej, w innym rozgłazieniu instrukcji '''jeśli''' dla: {{LinkPatrz|czy_znaleziono_okladka}} {{LinkZobaczTeż|czy_znaleziono_okladka}}, przebiera wartość jednak {{Code|false}}, wtedy podobnie zwracamy wyniki, jak dla: {{LinkZobaczTeż|wartosc}}.
; Gdy zmienna {{Code|podrecznik}} nie przyjmuje żadnej wartości logicznej
{{Tab}}Gdy zmienna {{LinkPatrz|podrecznik}}, nie przyjmuje żadnej wartości logicznej, wtedy dla {{LinkPatrz|wartosc}} dla żadnej jego wartości, funkcja jest zakańczana, przeciwnie, liczymy wartość {{LinkPatrz|tak}}, jako ({{Code|<nowiki>tak=tak or (wartosc==1)</nowiki>}} {{LinkPatrz|tak}}), gdy {{Code|wartosc}} jest równa {{Code|1}}, też jest zakańczana, w przeciwnym wypadku funkcja zwraca dwie wartości po kolei, tzn. {{Code|szablon}} i {{Code|tekst}}.
====== Dalszy ciąg funkcji w iteratorze wyszukujących pierwsze artykuły bez rozdziału ======
Dla elementów innych niż typu {{LinkZobaczTeż|obiekt}}, wtedy funkcja zwraca wyniki, jak dla {{LinkZobaczTeż|wartosc}}.
====== Użytek wartości ze zmiennej {{Code|tak}} ======
Na końcu w funkcji: {{LinkŚródtytuł|Wystepowanie}}, jest instrukcja warunkowa, w którym gdy zmienna {{LinkPatrz|tak}} jest równa wartości prawdziwej, to uruchamiana jest funkcja {{Code|funkcja1}} {{LinkPatrz|funkcja1}} z parametrem: {{LinkPatrz|szablon_spis_tresci}}, przeciwnie bezparametrowo {{Code|funkcja2}} {{LinkPatrz|funkcja2}}.
==== Kod funkcji iteratora - funkcji zwracanej przez jego generatora ====
Liczymy poszczególne linie z iteratora otrzymanego z {{LinkPatrz|iter_main}}.
; Deklaracje zmiennych
Deklarujemy użyte zmienne, jak: {{Code|nazwa_rozdzialu}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}}, {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, {{Code|numeracja_rozdzialu}} {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
;; Rozdział dodatni
Sprawdzamy, czy ta linia reprezentuje rozdział dodatni równaniowy, wtedy mamy tylko ustawione zmienne: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{LinkPatrz|poziom_rozdzialu}}.
Gdy nie uzyskano takiego rozdziału, wtedy dla zmiennej: {{LinkPatrz|czy_rozdzialy_analizowac}}, o wartości {{Code|false}}, inne linie nie będą sprawdzane, czy są rozdziałami,w innym wypadku, to rewidujemy funkcją. Gdy jednak to robimy, to dla {{LinkPatrz|czy_w_spisie_tresci}} odpowiadającej wartości fałszywej uruchamiamy funkcję {{LinkŚródtytuł|Wystepowanie}} z parametrem pierwszym {{LinkPatrz|linia|StronicowyParser/Rozdziały}} oraz z, drugą i trzecią, funkcją, który z parametru {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} usuwa jej wartość.
;;; Pierwsza anonimowa funkcja
{{Tab}}Tą pierwszą funkcją, jest tak gdy: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, z wartością odpowiadającej fałszywej, ustawiamy {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|Spis treści}}, a {{LinkPatrz|poziom_rozdzialu}} na {{Code|nil}}. Przeciwnie sprawdzamy wartość zmiennej {{LinkPatrz|szablon_spis_tresci}}, a jeżeli ona istnieje, to liczymy rozdział jego rozdział i numerację na podstawie: {{Code|{{sr|#p.NumeracjaOrazTekstWprowadzeniaTekstu|b=tak}}}}. A gdy nie ma takiego rozdziału, to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} jest ustawiana na {{LinkPatrz|szablon_spis_tresci}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} na {{Code|nil}}. A jeżeli {{LinkPatrz|szablon_spis_tresci}} nie istnieje, to nazwa rozdziału jest ustawiana na {{Code|Spis treści}}, a {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustawiona jest wtedy na {{Code|nil}}.
Dalej liczymy: {{Code|czy_rozdzial_naglowka_hn}} {{Patrz|czy_rozdzial_naglowka_hn}}, zamieniając zmienną liczbową: {{LinkPatrz|tak_ce_spis_tresci|StronicowyParser/Rozdziały/Tom IV}}, jeżeli ona nie istnieje, na wartość liczbową, a jeśli nie ma takiej wartości, to poziom rozdziału {{LinkPatrz|poziom_rozdzialu}} przyjmuje wartość {{Code|2}}. Na podstawie przeciwnej wartości {{LinkPatrz|czy_rozdzial_naglowka_hn}}, ustalamy, czy to jest rozdział centrowany, inicjując zmienną {{Code|czy_rozdzial_centrowany}} {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}} wartością {{Code|true/false}}. Wtedy początek rozdzialu {{Code|poczatek_rozdzialu}} {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} ustalamy na wartość nieistniejącą.
;;; Druga anonimowa funkcja
{{Tab}}Gdy nie nie dało się znaleźć odpowiednich pocżątków w liniach początkowych spisu, tzn. artykułów wstępnych, przed wszelkimi rozdziałami, wtedy nazwa rozdziału jest nilowana.
;; Inne możliwe rozdziały niż dodatnie, albo możliwe linie tekstowe
Gdy nie udało się znaleźć {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, jako z elementu nagłówka rozdziału dodatniego, to potrzebne do tego parametry liczymy z funkcji {{LinkPatrz|parser}}, według:
<syntaxhighlight lang="lua">
local linia_temp;
linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
</syntaxhighlight>
Ta funkcja sprawdza, czy dana linia niebądąca rozdziałem dodatnim równaniowym, czy można uznać za rozdział, a jeżeli tego nie można zrobić, to ona zwraca wynik tylko {{Code|nil}}.
==== Wartości zwracane przez iterator ====
Gdy: {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, gdy istnieje, wtedy ustalamy zmienną: {{LinkPatrz|czy_w_spisie_tresci}}, na wartość {{Code|true}}, wtedy zbieramy dany rozdział, wraz z jego tekstem, i innymi parametrami, w sposób {{Patrz|zwracane parametry}}:
<syntaxhighlight lang="lua">
{naglowek,linia,},tekst_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany;
</syntaxhighlight>
Gdzie parametry wartości zwracanych:
* {{Code|naglowek}} - jest to {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/Rozdziały}},
* {{Code|tekst_rozdzialu}} {{Patrz|tekst_rozdzialu}} jest to właśnie {{Code|str}} {{LinkPatrz|str}} w kodzie,
* {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|numeracja_rozdzialu}} - jak w: {{LinkPatrz|numeracja_rozdzialu|StronicowyParser/Rozdziały/Tom IV}},
* {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany|StronicowyParser/Rozdziały/Tom IV}}.
Gdy {{LinkPatrz|__FUNKCJA2}} nie istnieje, wtedy: {{Code|nagłówek}} {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}} i {{Code|tekst_rozdziału}} {{LinkPatrz|tekst_rozdzialu}}, kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekst|p=Szablonowe}}}}, i te wartości {{LinkPatrz|zwracane parametry}} zwracamy na zewnętrz funkcji.
Gdy przeciwnie, wtedy po uzyskaniu tych zmiennych odpowiednio, na nagłówek działamy funkcją {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2}} z parametrem identyfikującym, że to jest rozdział {{LinkPatrz|nazwa_rozdzialu|StronicowyParser/Rozdziały/Tom IV}}, czy tekst rozdzialu {{LinkPatrz|tekst_rozdzialu}}.
{{BrClear}}
<noinclude><!--
-->{{ProstaStronaKoniec}}<!--
-->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!--
--></noinclude>
jf6zvwdxwbwb5z072ovubamivmg2ede